1. 程式人生 > >Git 倉庫中刪除大檔案的歷史提交記錄

Git 倉庫中刪除大檔案的歷史提交記錄

剛接觸這東西,會使用GitHub for windows 之後,感覺挺好用的。

不過最近發現,程式碼庫已經有90M大小了。想一想,除了把ttf字型檔案提交了之外,圖片素材,和編譯後的class檔案都提交了。

網上找一些方法,刪除歷史記錄。綜合一下,總算成功了。

官方教程:

https://help.github.com/articles/remove-sensitive-data   

相關教程:

http://yihui.name/cn/2010/12/animation-update-1-1-5/

http://www.azhowto.com/removing-sensitive-data-from-git/

其中要填的是路徑。官方教程裡就位於根目錄,所以直接寫的檔名。

上面還提到了,windows下要用雙引號。(其實後來發現單引號也行)

路徑分隔符,要使用斜槓 / 

可以這樣,刪除生成檔案。

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch ./myproject/bins/*" --prune-empty --tag-name-filter cat  HEAD -- --all

PS:

又試了幾下,上面的命令好像有些問題了,也可以用這條命令

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch *.jar" HEAD -- --all

官方教程裡的命令好像有點問題,在 cat 後面少了個 HEAD

參考網上的一些資料,最後我用的是這樣的命令

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.class'   --prune-empty --tag-name-filter cat HEAD -- --all


然後 按照Animation 文章裡面的,執行後面幾條命令,把改動push 到遠端伺服器上。

然後把本地歷史檔案也情況,這下 du -sh 就看到資料夾已經只有  100多K 了

git push origin master --force
rm -Force -R .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now


PS: 某處看到的,新增到 .gitignore 之後,有些檔案還是被跟蹤了,因為這些檔案已經被 add了。 只要  git rm 這些檔案,ignore 列表就生效了。

git rm --cached git rm會本地刪除檔案,並取消git的跟蹤。 用 git rm --cached 可以本地不刪除,並取消git 的跟蹤。然後 commit 就好啦

本人CSDN部落格目錄: