Git 将文件拆分为单独的存储库,保留历史记录

Git 将文件拆分为单独的存储库,保留历史记录,git,git-subtree,git-filter-branch,Git,Git Subtree,Git Filter Branch,我只想在单个文件而不是目录上执行与git子树拆分类似的操作。也就是说,我想创建一个新的存储库,其中只包含一个文件及其所有历史记录 将文件名传递给--prefix参数无效 git subtree split --prefix=file_name -b split 我在git filter branch上尝试了几个变体,但没有找到正确的咒语。您可以使用filter branch和树过滤器删除除要保留的文件以外的所有内容 git filter-branch --tree-filter 'find -

我只想在单个文件而不是目录上执行与git子树拆分类似的操作。也就是说,我想创建一个新的存储库,其中只包含一个文件及其所有历史记录

将文件名传递给
--prefix
参数无效

git subtree split --prefix=file_name -b split

我在
git filter branch
上尝试了几个变体,但没有找到正确的咒语。

您可以使用
filter branch
树过滤器
删除除要保留的文件以外的所有内容

git filter-branch --tree-filter 'find -type f -not -path ./foo/bar -delete' --prune-empty

. 为了实现您想要的,您必须复制您希望复制的提交,而不是任何其他提交。您可以使用git filter branch来实现这一点,它既缓慢又痛苦。你可以用其他更快的方法来做;但是,在编写类似于
git subtree
的脚本之前,仍然会很痛苦。以下是一个适用于一个或多个文件的解决方案:请注意,在文件路径的开头包含
/
,这一点非常关键。然后,我使用了删除根提交的方法。在我的例子中,我想要的文件不在根提交中,但提交被保留为空提交。