2015-04-22 89 views
2

所以我們有一個用戶添加,然後在她的工作區中刪除一個大的文件目錄它有兩個不同的提交。然後,她將自己的變化推向了中央回購站,並且最終用戶看起來像是一個noop。問題是我們的中央倉庫因此大小增加了50倍。我已經嘗試過濾分支的幾件事情,它只是不工作。從git倉庫中刪除一個提交的內容,它已經被git -rm處理並且被推送

因此,添加的文件夾位於根級別。它的名字叫。核心

我曾嘗試基於鏈接以下過濾器分支:我已經試過像看起來

http://www.somethingorothersoft.com/2009/09/08/the-definitive-step-by-step-guide-on-how-to-delete-a-directory-permanently-from-git-on-widnows-for-dumbasses-like-myself/

http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/

Remove a directory permanently from git

最後的命令這個:

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch .core" --prune-empty --tag-name-filter cat -- --all 
rm -Rf .git/refs/original 
rm -Rf .git/refs/logs 
git reflog expire --expire=now --all && git gc --prune=now --aggressive 

結果輸出表示Ref未更改。我已經嘗試將.core的引用更改爲諸如./.core,* .core/*等各種變體,但沒有任何內容被刪除。

謝謝。

回答

3

使用the BFG,這是一種更簡單,更快速的git-filter-branch替代方案,專門用於從Git歷史記錄中刪除不需要的文件。

仔細按照BFG的usage instructions - 最核心的部分就是這個:

$ java -jar bfg.jar --delete-folders .core my-repo.git 

命名.core(是不是在你的最新提交)的任何文件夾會從你的Git倉庫的歷史被刪除。然後,您可以使用git gc清理掉死數據:

$ git reflog expire --expire=now --all && git gc --prune=now --aggressive 

的BFG通常比運行git-filter-branch至少快10-720x,一般更容易使用。

完全披露:我是BFG Repo-Cleaner的作者。

+0

出於好奇:這個工具會重寫歷史嗎?如果我要檢查提交的問題,Git會如何將大文件傳遞給我? –

+1

好的,我們使用BFG來清理大斑點,從來沒有在文件夾上嘗試過。我可以證實這個作品非常好。請注意,使用bfg-1.12.3時出現錯誤輸出: /gitstore/repositories/test/root.git.bfg-report/2015-04-22/11-02-43 線程中的異常「main」java.io.IOException:No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:900) at scalax.io.support .FileUtils $$ anonfun $ $ scalax IO $ $支持fileutils中$$預開$ 1.適用(FileUtils.scala:66) – Peter

相關問題