.git/objects在我的rails項目目錄中仍然很大,刪除了數百兆字節的意外生成的垃圾。如何清潔我的.git文件夾?清理我的項目目錄,但.git仍然很大
我試過git add -A
,以及其他命令來更新索引並刪除不存在的文件。我可能不正確地收集目錄中具有兩個字符名稱的文件是blob。我試着回滾到之前的提交,但沒有運氣。
我能做些什麼來清理這個目錄?
.git/objects在我的rails項目目錄中仍然很大,刪除了數百兆字節的意外生成的垃圾。如何清潔我的.git文件夾?清理我的項目目錄,但.git仍然很大
我試過git add -A
,以及其他命令來更新索引並刪除不存在的文件。我可能不正確地收集目錄中具有兩個字符名稱的文件是blob。我試着回滾到之前的提交,但沒有運氣。
我能做些什麼來清理這個目錄?
如果您添加了文件然後刪除它們,斑點仍然存在但是懸空。 git fsck
將列出無法訪問的斑點,並且git prune
將刪除它們。
如果您添加了這些文件,提交了這些文件,然後回滾了git reset --hard HEAD^
,那麼它們會陷入更深的困境。 git fsck
將不會列出任何懸而未決的提交或blob,因爲您的分支的reflog持有他們。下面就來確保只有在你的歷史合適的對象會保持一個辦法:
git reflog expire --expire=now --all
git repack -ad # Remove dangling objects from packfiles
git prune # Remove dangling loose objects
另一種方式也是克隆庫,因爲這將只執行其中可達的對象。但是,如果晃來晃去的對象得到了包裝(如果你執行許多操作,git的很可能自動包裝),然後是本地克隆將攜帶整個打包文件:
git clone foo bar # bad
git clone --no-hardlinks foo bar # also bad
您必須指定一個協議,迫使GIT中計算一個新的包:
git clone file://foo bar # good
您是否試過git gc
命令?
如果您還有修剪及重新包裝(gc --aggressive --prune=tomorrow
...),那麼你可以簡單地去尋找奇一出後,大量回購:
git rev-list --objects --all |
while read sha1 fname
do
echo -e "$(git cat-file -s $sha1)\t$\t$fname"
done | sort -n
這會給你一個按升序大小排序的對象列表。你可以使用git-filter-branch從你的repo中刪除罪魁禍首。
請參閱「刪除對象」在http://progit.org/book/ch9-7.html指導
@DavidJames感謝<的提示。我把它更可讀,IMO – sehe 2012-08-13 11:39:14
就在在這個情況下,任何人的旅行:有一個在括號中的ARGS一個錯字:應該是'--aggressive'。試圖編輯,但事實證明,你不能編輯這樣一個小的錯字。 – hellobenallan 2015-11-26 09:35:37
@hellobenallan感謝紙條,[固定](http://stackoverflow.com/posts/5293344/revisions) – sehe 2015-11-26 09:46:46
下面是我用實際刪除文件(我用sehe's answer找到元兇)的命令:如果您只需要刪除
git filter-branch --tree-filter 'rm -rf path/to/folder' HEAD
一個單一的文件,你可以這樣做:
git filter-branch --tree-filter 'rm filename' HEAD
來源:Permanently remove files and folders from a git repository
Sparkleshare在我的git中創建了13GB的tmp_pack_文件,無法將多次巨大的映像簽入。唯一有幫助的是......
rm -f .git/objects/*/tmp_*
'git gc'沒有刪除這些文件。
這是一個漂亮的蠻力解決方案,但我看不出有任何理由它不會工作。太好了! – light24bulbs 2015-05-11 21:30:57
絕望的情況需要絕望的措施,它像一個魅力工作!韓國社交協會。 – medina 2016-08-12 00:36:00
是的,我注意到這個問題之前沒有提交。除了最後一條命令之外,我已經嘗試了一切。當我從我的項目目錄中運行這個「警告:你似乎已經克隆了一個空的存儲庫。」我一直在閱讀文檔,但它很重要。我如何將克隆指向正確的源? – light24bulbs 2011-03-11 20:26:21
@user的'文件:// URL foo'是相對於當前目錄和'文件:///家/我/ foo'(三個斜槓)是絕對的。 – 2011-03-11 20:43:45
謝謝!這個尺寸縮小了一半,但是我的包仍然是存儲庫其餘部分的十倍。我試着修剪.. – light24bulbs 2011-03-11 21:12:59