我打算从大约10000次提交和5000个文件的存储库中提取少量文件到单独的存储库中。这些文件分布在几个目录中,并且这些目录中有不相关的文件。
git filter-branch
的--subdirectory-filter
实际上不是一个选项,因为它仅接受单个目录。另外,它不会跟随重命名,因此,如果文件最初是在另一个目录中引入的,则历史记录的一部分也会丢失。
我当前的解决方案是:
git filter-branch --tree-filter 'fd -E 3166 -X rm -rf'
其中fd
is a faster find
和fd
是所有提取文件的文件名的唯一部分。它会执行所有提交操作,查找所有不相关的文件并将其删除。这太慢了,但是要花几个小时。
有更好的方法吗?
我想您可以测试find
(git上游建议使用它代替滤镜分支)。您可以在其中指定多个文件夹...。我想您可以提供所有您关心的目录,既“当前”目录,也可以提供历史记录。
3166
[filter-repo
也有一个https://github.com/newren/git-filter-repo。