【问题标题】:Completely removing a folder from git [duplicate]从 git 中完全删除一个文件夹 [重复]
【发布时间】:2017-02-16 01:01:01
【问题描述】:

要从 git 中删除名为 build 的文件夹,我使用:

git rm --cached -r build

据我所知answer。

但是,IIUC,该目录仍保留在 git 的数据库中。

我测试了这个问题:

  1. 初始化了一个新的 git 存储库。
  2. 添加了一个名为 build 的新目录,其中包含一个大文件 (7MB) 并已提交。
  3. 执行:

    git rm --cached -r build
    

.git 目录的大小仍然是 7mb,这意味着取消跟踪和删除并没有改变 git 历史记录,这是理所当然的。

有什么方法可以彻底清理提交了几次提交的错误提交的目录?

在我的情况下,因为我只是在第三次提交,几乎不关心项目的历史,我删除了 .git 文件夹并重新开始,但我想知道是否有更好的方法.

【问题讨论】:

    标签: git


    【解决方案1】:

    答案与从所有历史记录中删除单个文件相同(具有所有相同的警告),只是不是指示过滤器删除一个文件,而是指示它删除以该路径开头的所有文件,例如,git rm --cached -rf path/to/directory 作为您的--index-filter 和git filter-branch。参见,例如,this answer 到 How to remove/delete a large file from commit history in Git repository? 另请参见 Completely remove file from all Git repository commit history。

    请注意,在使用 git filter-branch(您应该在克隆上执行此操作)之后,缩小存储库的最简单方法 - 现在该存储库的数量高达 两倍提交,因为过滤器不能改变现有的提交,所以只能将它们复制到更正的新提交——就是克隆过滤后的克隆。

    【讨论】:

      【解决方案2】:
      git filter-branch --tree-filter 'rm -rf src/folder' HEAD
      

      git rm 仅从工作树中删除

      【讨论】:

        【解决方案3】:

        通常,您需要重写提交历史,以便从所述提交中清除大文件。

        一个很好的工具是BFG Repo cleaner:它比原生的git filter-branch更快

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

        一旦你过滤了你的提交,你仍然需要申请git gc/repack/prune 以使大小真正下降。

        【讨论】:

          猜你喜欢
          • 2015-01-06
          • 2013-05-28
          • 2012-05-22
          • 2012-07-01
          • 2012-06-09
          • 2021-12-29
          • 2012-07-14
          • 1970-01-01
          • 2014-03-10
          相关资源
          最近更新 更多