2016-10-07 88 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只能从工作树移除