【问题标题】:git filter-branch is not removing my directorygit filter-branch 没有删除我的目录
【发布时间】:2015-02-10 13:18:26
【问题描述】:

我的 git 存储库顶部有一个 incubator 目录,我想将其从历史记录中完全删除。我试过了:

git filter-branch --force --tree-filter "rm -rf incubator/" --prune-empty HEAD

还有:

git filter-branch --force --index-filter "git rm --cached -r -f --ignore-unmatch incubator" --prune-empty

但它们都不起作用。

我在这里做错了吗?有什么方法可以让我看到正在发生的事情或为什么这个目录没有被删除?

【问题讨论】:

    标签: git git-filter-branch git-rewrite-history


    【解决方案1】:

    重写 Git 历史记录是一个棘手的过程,git-filter-branch 并不容易(见下文),因此请改用the BFG,这是git-filter-branch 的更简单、更快的替代方案,专为从 Git 中删除不需要的文件而设计历史。

    仔细关注 BFG 的usage instructions - 核心部分就是这样:

    $ java -jar bfg.jar  --delete-folders incubator  my-repo.git
    

    任何名为 incubator 的文件夹(不在您的 latest 提交中)都将从您的 Git 存储库的历史记录中删除。然后您可以使用git gc 清除死数据:

    $ git gc --prune=now --aggressive
    

    BFG 通常至少比运行10-720xgit-filter-branch,并且通常更易于使用。

    ...诊断 git filter-branch 故障?

    因为(如上所述)重写 Git 历史是一项复杂的工作,有很多可能出错的方式,所以你可能需要在你所说的地方添加更多细节"但在你的问题中,它们都不起作用”。你使用的git filter-branch 咒语看起来会做一些事情 - 它会从你的主分支中删除incubator 文件夹 - 所以它至少这样做了吗?也许您希望它从其他分支中删除,在这种情况下您需要添加 --all 标志,或者您可能希望它也从标记提交中删除,这将需要 --tag-name-filter cat。更多详情:https://stackoverflow.com/a/21023615/438886

    还有很多事情可能出错,如果可以的话,最好使用 BFG。

    全面披露:我是 BFG Repo-Cleaner 的作者。

    【讨论】:

      猜你喜欢
      • 2011-08-06
      • 1970-01-01
      • 2016-12-15
      • 2012-08-16
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2021-05-19
      相关资源
      最近更新 更多