Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除git筛选器分支中的大量文件_Git_Git Filter Branch_Git Rewrite History - Fatal编程技术网

删除git筛选器分支中的大量文件

删除git筛选器分支中的大量文件,git,git-filter-branch,git-rewrite-history,Git,Git Filter Branch,Git Rewrite History,我正在将存储库从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 fi

我正在将存储库从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
但它会运行数吨次,而且历史悠久。。因此,这将花费太多的时间

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

我建议使用一种比
git filter branch
更简单、更快的替代方法,专门用于从git历史中删除不需要的文件

您在文章中提到,问题文件通常是大型二进制文件,BFG有一个处理此问题的特定选项-您应该仔细遵循BFG,但核心部分仅此:

$ java -jar bfg.jar  --strip-blobs-bigger-than 10M  my-repo.git
任何大小超过10MB的文件(不在最新提交中)都将从Git存储库的历史记录中删除。然后可以使用
git gc
清除死数据:

$ git gc --prune=now --aggressive
BFG通常至少比运行git过滤器分支快,并且通常更易于使用


完全公开:我是BFG回购清洁工的作者。

你能考虑在2号GIT期间分裂Git吗?我基本上是在要求对存储库进行重构,这可能与我所做的重复。但回购协议仍然太大。我的同事过去常常向SVN提交二进制文件,比如jBoss、JDK和其他东西。。。真是一团糟。@caarlos0你有没有读过里面关于如何使用
filter branch
删除大量文件的答案?你试过了吗?(有不止一种方法)。你试过哪些?您是否看到任何错误消息或其他指示,说明它们可能失败的原因?我尝试了几种方法。。。都不起作用,出现了“找不到文件”之类的错误和奇怪的语法错误。。。无论如何也许我会等待我的
结束..我最终会等待。。。但由于这是唯一的答案,我已经检查过它是否正确。感谢这对于大量非常小的文件是无用的。还有,
--激进的
在这里是个好主意吗?看,我没有访问bfg的权限,因此我最终使用了与原始问题几乎相同的。