我参与了一个涉及创建具有许多功能的redmine插件的项目。
现在我想了解一些功能并将它们转换为单独的插件。为此,我将为每个创建一个单独的git存储库。
在那个git存储库中,我希望从原始git存储库获得完整的历史记录,只包含与该功能相关的文件。
我是否应该将旧存储库作为远程存储器并手动完成每个提交,找到我感兴趣的存储,并将它们提交到新的存储库?
或者还有另一种(更实际的)方法吗?
旧git存储库的工作流程为:
只有主分支;
每次里程碑完成 它被承诺并推向了 远程;
答案 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 对此感兴趣。
克隆原始存储库,然后为每个插件创建一个分支,并在每个分支上删除与该插件无关的任何内容。这样,你所有的插件都有追溯到它们共同起源的历史。