【问题标题】:Remove a lot of files in git filter-branch删除 git filter-branch 中的很多文件
【发布时间】:2013-08-01 12:01:52
【问题描述】:

我正在将存储库从 svn 迁移到 git。

在最后一步中,我想从历史记录中删除大量不需要的文件。

我正在尝试以下命令:

git filter-branch --prune-empty --index-filter \
  "for file in $(cat files); do git rm -rf --cached --ignore-unmatch ${file}; done" -f

但是它说参数列表太长了。

我可以这样重写:

for file in $(cat files); do
  git filter-branch --prune-empty --index-filter \
    "git rm -rf --cached --ignore-unmatch ${file}" -f
done

但它会运行 filter-branch 很多次,而且历史很长。所以,它会花费太多时间。

有没有更快的过滤分支删除大量文件的方法?

【问题讨论】:

  • 你可以考虑在svn 2 git期间拆分git吗?我基本上是在要求存储库重构
  • 我做到了。但回购仍然太大。我的同事过去常常将二进制文件提交到 SVN,比如 jBoss、JDK 和其他东西……真是一团糟……
  • @caarlos0 您是否阅读了那里有关使用filter-branch 删除大量文件的方法的答案?你试过了吗? (有不止一种方法)。你尝试了哪些?您是否看到任何错误消息或其他指示它们可能失败的原因?
  • 我已经尝试了几种方法...没有一个有效,出现“找不到文件”和奇怪的语法错误之类的错误...无论如何...也许我会等待我的 for 结束。 .

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


【解决方案1】:

我建议使用The BFG,它是git-filter-branch 的更简单、更快的替代方案,专门用于从 Git 历史记录中删除不需要的文件。

您在your comment 中提到,问题文件通常是大二进制文件,BFG 有一个特定的选项来处理这个问题 - 您应该仔细遵循 BFG 的usage instructions,但核心部分是这样的:

$ java -jar bfg.jar  --strip-blobs-bigger-than 10M  my-repo.git

任何大小超过 10MB 的文件(不在您的 最新 提交中)都将从您的 Git 存储库的历史记录中删除。然后您可以使用git gc 清除死数据:

$ git gc --prune=now --aggressive

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

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

【讨论】:

猜你喜欢
  • 2012-08-16
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2013-03-29
相关资源
最近更新 更多