从前一个提交创建一个git存储库

时间:2011-01-21 02:47:25

标签: git github

我参与了一个涉及创建具有许多功能的redmine插件的项目。

现在我想了解一些功能并将它们转换为单独的插件。为此,我将为每个创建一个单独的git存储库。

在那个git存储库中,我希望从原始git存储库获得完整的历史记录,只包含与该功能相关的文件。

我是否应该将旧存储库作为远程存储器并手动完成每个提交,找到我感兴趣的存储,并将它们提交到新的存储库?

或者还有另一种(更实际的)方法吗?

旧git存储库的工作流程为:

  • 只有主分支;

  • 每次里程碑完成 它被承诺并推向了 远程;

2 个答案:

答案 0 :(得分:7)

看看git-filter-branch(1)这是Git的瑞士军刀用于自动重写历史记录,它当然允许你保持所有提交触及一组已定义的文件(并删除其他所有文件)。

如何详细使用它取决于您的实际存储库。例如,如果您要保留的所有文件已经整齐地包含在子目录中(例如,foobar),那么以下就足够了:

git filter-branch --subdirectory-filter foobar --prune-empty -- --all

作为替代方案,您可以使用以下内容删除所有文件,但要删除存储库中的文件:

git filter-branch --tree-filter 'rm -f filename1 pattern2.*' --prune-empty -- --all

答案 1 :(得分:4)

您可以保留原始历史记录(提供所有更改的上下文),而不是重写历史记录以仅提取您感兴趣的文件,并添加新的提交,只删除您所有的文件't 对此感兴趣。

克隆原始存储库,然后为每个插件创建一个分支,并在每个分支上删除与该插件无关的任何内容。这样,你所有的插件都有追溯到它们共同起源的历史。