天天看點

《Pro Git 2》學習筆記_Chapter 10_Maintenance_DataRecovery_RemoveObject

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删除倉庫中過期的對象