2017-05-24 30 views
0

我一直在試圖通過移動一些文件到git LFS來減少我的Git倉庫的大小。還有幾百條命令,這裏我們使用git LFS中的文件,並且在我的git commit中沒有更多這些文件的歷史記錄。如何刪除遠程git倉庫中的懸掛提交像VSTS

但是,無論何時我克隆存儲庫,我仍在下載大約3GB的對象。我通過在Visual Studio Team Services中創建一個新的存儲庫,並在本地修剪和垃圾收集我的存儲庫之後解決了這個問題,然後在那裏進行推送,將其減少到300mb。 (命令做到這一點本地發現在這篇文章中:Git: what is a dangling commit/blob and where do they come from?

但我無法想象,你總是要刪除/重新創建一個完整的存儲庫,以刪除懸而未決的提交。

我也試過做一個git init,然後將它推到現有的存儲庫上,但它只是進一步增加了對象數量。

對於任何人也遇到類似的問題,這些都是我執行而不晃來晃去的提交創建一個新的存儲庫的命令,但是我想了解如何在現有的存儲庫這樣做,而不必刪除它:

git clone https://avavedse.visualstudio.com/Test/_git/TestRepository 
cd blahblah 
git reflog expire --expire=now --all 
git gc --prune=now 
git remote add newrepo https://avavedse.visualstudio.com/Test/_git/TestRepositoryNewEdition 
git push newrepo 
+0

LFS重寫是一個非常重要的修改回購;爲什麼你「不能想象」它需要完全更換遙控器?爲了記錄,如果遠程的託管服務提供了對'git gc'的控制,那麼你可能*能夠清理它而不是替換它,但我通常不會指望它。 –

+0

因爲它意味着必須實際對存儲庫進行功能更改才能解決技術限制。 – Devedse

+0

如何?你有一個遙控器和一組裁判;你刪除它,並用一個新的repo替換它,它具有相同的引用(指向相同的提交,甚至),但膨脹更少。那是什麼功能變化?相比之下,當您運行LFS遷移(將所有引用修改爲指向新提交)時,*已經是功能更改*,這將需要任何用戶執行恢復(最容易通過丟棄和替換所有克隆來處理) 。由於LFS遷移是可以發生的功能變化,我不理解這個問題 –

回答

0

實際上,當您執行git reflog expire --expire=now --all和git gc --prune=now時,danglind提交已被刪除。您可以通過git fsck --full進行雙重檢查。如果輸出不顯示提交,那意味着沒有懸而未決的提交。

回購大小並沒有明顯減少的另一個原因是您沒有刪除git歷史記錄中的LFS文件。您可以通過改寫歷史:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch filename --prune-empty --tag-name-filter cat -- --all 
git push -f 

更多細節有關移動文件從混帳與git-LFS,你可以參考moving a file in your repository to git-lfs

+0

但是這個命令似乎只在本地修剪倉庫,而不是在遠程倉庫中修剪。 – Devedse