我正在将存储库从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
但是它会经历过多次过滤分支,历史很长......所以,这需要花费太多时间。
有没有更快的方法来过滤分支删除大量文件?
答案 0 :(得分:6)
我建议使用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通常比运行git-filter-branch
至少10-720x快,并且通常更容易使用。
完全披露:我是BFG Repo-Cleaner的作者。