Maintenance
Git可以通過自動垃圾回收的方式,有效的利用存儲空間,一般.git/objects/目錄下的對象是以松散的方式存放的,但當這些松散對象的個數超過7000時,git會自動進行壓縮,形成pack檔案,當pack檔案多于50個時,Git回把多個pack檔案壓縮成為一個pack檔案
此外,垃圾回收的功能還會對.git/refs/中的内容進行壓縮,存入.git/packed-refs檔案中。
也可以手動運作Git的垃圾回收功能:git gc (gc表示garbage collection)
還可以設定自動垃圾回收:git gc --auto,至于觸發回收動作的條件可以通過配置gc.auto各gc.autopacklimit來進行設定
DataRecovery
當你不小心失支了對某些commit對象的引用時,可以嘗試的恢複辦法有:
檢視reflog日志:git reflog 或 git log -g ,并重建立立分枝索引
當reflog 也不可用時,可以使用:git fsck --full 對git倉庫的檔案系統進行完整性檢查,列出那些沒有被引用過的對象,進而重新獲得它們
reflog記錄每一次HEAD改變時的值,送出或改變分枝時,reflog都會更新
RemoveObject
這一節太難了,原書510頁,用的時候就重看吧。
記幾句主要的指令來作一個思維串引:
git rm <to-be-deleted-file-name>從倉庫中删除檔案
git count-objects -v顯示倉庫中對象的統計資訊
git verify-pack <packfilename>檢視打封包件的内容
git rev-list
git filter-branch
git prune --expire now删除倉庫中過期的對象