git - 将一组给定的文件提取到存储库

标签 git git-filter-branch git-filter-repo

我打算从一个包含约 10000 个提交和 5000 个文件的存储库中提取一些文件到一个单独的存储库中。这些文件分布在多个目录中,并且这些目录中有不相关的文件。

git filter-branch--subdirectory-filter 实际上不是一个选项,因为它只接受一个目录。此外,它不遵循重命名,因此部分历史记录(如果文件最初是在另一个目录中引入的)将丢失。

我目前的解决方案是:

git filter-branch --tree-filter 'fd -E 3166 -X rm -rf'

在哪里fd is a faster find , 3166 是所有提取文件的文件名的唯一部分。它的作用是遍历所有提交,找到所有不相关的文件并删除它们。这非常慢,但是需要数小时。

有没有更好的方法?

最佳答案

我猜你可以测试 filter-repo(git upstream 建议使用它而不是 filter-branch)。在那里您可以指定多个文件夹....我想您可以提供您关心的所有目录,包括“当前”目录和历史目录。

https://github.com/newren/git-filter-repo

关于git - 将一组给定的文件提取到存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59615245/

相关文章:

git - 如何使用正则表达式 git filter-branch 来从历史记录中永久删除文件/目录?

git - .gitattributes 与 merge=ours 的正确用法是什么

git - 如何使 git stash 包含尚未暂存的新文件?

ruby-on-rails - Rails 3 应用程序,如何获取 GIT 版本和更新网站?

git - 无效的作者/提交者行 - 电子邮件前缺少空格

git - 从 git 缓存中删除的文件不会反射(reflect)在远程存储库上

git - 在 Visual Studio 中使用 git 子模块的工作流程

git - 如何使用 git filter-repo 考虑文件路径和数据来修改 blob?

bash - git filter repo 可以根据日期从许多 repos 交织提交中创建一个 monorepo 吗?