2013-01-11 34 views
3

因此,目前我有什麼似乎是一個非常複雜的問題,我需要一些幫助如何解決它無法將二進制文件移動到CDN/Dropbox等。在評估這個問題時,請注意,刪除圖像/ PDF等,並將它們放入保管箱或其他外部存儲器不幸是不是一種選擇。從git中刪除舊的二進制版本,並減小git存儲庫的大小

所以目前的問題是我有幾百個存儲庫,每個存儲庫有幾千個提交,每個回購一般都有3個分支。在我的一個測試版本中,如果我做了一個版本庫,它的大小約爲13GB。工作目錄的大小約爲800mb。所以,我曾嘗試迄今減小尺寸如下:

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path/to/largest/files.pdf" HEAD 
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune 
git gc --prune=now --aggressive 
git repack -a -d --depth=250 --window=250 

上杜庫目錄-SH仍顯示它在13GB的規模以上全部測試後。所以我的下一個想法是刪除所有的二進制文件歷史(JPG/PDF/PNG等),但只保留二進制文件的最新版本。但我不知道如何做到這一點,我可能做 爲我在find -name "*.pdf";做 git filter-branch --index-filter「git rm -rf --cached --ignore-unmatch $ i」HEAD done 例如,但我不確定這是否是最好的方式去做事情它可能需要永久完成所有不同的資產類型。

這裏的主要目標是通過只保留歷史記錄中的二進制文件的一個版本來減小文件大小,所有以前刪除的歷史記錄中的二進制文件也可以被刪除,這是我100%罰款但也不知道如何以自動化的方式做到這一點。

任何幫助,將不勝感激。

+0

難道這些文件在其他部門仍然被引用?你有多少分支? – mvp

+0

總的來說,由於這個確切的問題,我們總是保留3個分支來將分支數量降到最低。我們使用* master *分支進行主線開發,然後將主分支合併到測試分支,在分支進行穩定性評估。最後,測試分支合併到生產分支中。 –

+0

對此的一個例外是,如果有一個要添加的新功能將跨越多個衝刺,則會創建一個附加功能分支。然而,該分支最終被合併回主分支,然後該分支被刪除。 –

回答

1

由於您有3個分支,您爲什麼不指定在第一個git filter-branch命令的所有分支上工作?

git filter-branch --index-filter \ 
"git rm -rf --cached --ignore-unmatch path/to/largest/files.pdf" -- --all 

然後以刪除refs/original我建議如下命令引用:

git for-each-ref --format="%(refname)" refs/original/ | \ 
xargs -n 1 git update-ref -d