2016-10-07 89 views
1

刪除文件夾若要從混帳刪除名爲文件夾建立使用:完全從混帳

git rm --cached -r build 

當我從這個answer教訓。

但是,IIUC,該目錄仍然在git的數據庫中。

我測試了此事:

  1. 初始化一個新的Git倉庫。
  2. 增加了一個新目錄,名爲build,帶有一個大文件(7MB)並已提交。
  3. 進行:

    git rm --cached -r build 
    

git的目錄的大小仍7MB這意味着untracking和刪除沒有改變git的歷史,還振振有詞,因爲它應該。

徹底清理承諾提交的錯誤提交目錄的方法是什麼?

就我而言,因爲我只是在第三次提交時對項目的歷史沒有多少關注,所以我刪除了.git文件夾並重新開始,但我想知道是否有更好的方法。

回答

1

通常情況下,您需要重寫提交的歷史記錄以便清除所述提交中的大文件。

一個很好的工具是BFG Repo cleaner:它比天然git filter-branch

java -jar bfg.jar --strip-blobs-bigger-than 5M some-big-repo.git 

更快一旦你過濾你的提交,你仍然需要以申請git gc/repack/prune的大小實際上下去。

2

答案與從所有歷史記錄中刪除單個文件(具有所有相同的注意事項)相同,除了不是指示過濾器刪除一個文件,而是指示它刪除以該路徑開頭的所有文件,例如,git rm --cached -rf path/to/directory作爲您的--index-filtergit filter-branch。參見例如,this answerHow to remove/delete a large file from commit history in Git repository?也參見Completely remove file from all Git repository commit history

注意,使用git filter-branch後(你應該對克隆做),以最簡單的方式收縮庫,現在有多達兩倍多提交,因爲過濾器不能改變現有的提交,只拷貝他們糾正新的問題 - 就是克隆過濾的克隆。

1
git filter-branch --tree-filter 'rm -rf src/folder' HEAD 

git rm只能從工作樹移除