2017-11-17 219 views

回答

2

Git最終可能會真正銷燬一些對象,包括未提交的提交;但它可能不會。爲了達到這個目的,請仔細閱讀。

最直接的控制可通過git prunegit repackgit prune-packed獲得。運行git gc運行所有這些,以及更多。假設git prune或甚至是git gc --prune=now將會訣竅的主要問題是現在無法訪問的對象可能是打包的

通常,您應該首先終止reflogs,因爲刪除過期的reflog條目可能會導致對象無法訪問。使用git gc以相對安全的方式以正確的順序完成所有這些工作:首先過濾reflogs,然後修剪(仔細地),然後重新打包,然後修剪打包。 prune步驟寬鬆未參考的對象自己過期。 之後,其他步驟重新包裝正在使用的舊對象,並刪除剛剛打包的對象。

這一系列事件就是爲什麼我們需要git repack -d或甚至-ad,其次是git prune-packed。但是,如果某些包標有.keep文件,則這些包將保留,如果包含其他未引用的對象,則這些對象也將保留。


由於多個GIT中的命令可以並行地運行,這是明智的提供,在此期間未引用的對象住,在情況下,他們將要成爲引用的寬限期。請注意,它是git gc,它插入默認的14天寬限期; git prune默認爲--expire=now而不是--expire=2.weeks.ago。這給Git命令336小時完成他們的工作和水泥參考:例如,git commit運行git write-tree其次是git commit-tree,並且此樹和提交都未被引用,直到git commit也更新當前分支名稱。通常情況下,整個過程只需要幾毫秒,因此336小時應該足夠的時間。

1

git-prune有刪除孤兒對象的明確任務聲明。

相關問題