删除git筛选器分支中的大量文件
我正在将存储库从svn迁移到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
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的权限,因此我最终使用了与原始问题几乎相同的。