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部落格目錄: