使用git同时维护不同版本的代码

时间:2010-11-30 15:03:54

标签: git version-control workflow branch

我得到了一个我需要优化的代码。我想同时维护一组代码版本(每个版本可以描述为一些功能的组合,优化)。最终,我将决定哪个版本是最好的版本。我不想将这些版本合并为更少的版本。但是,我希望能够对(大)源文件进行(次要)修改,这可能会转移到版本之间,我希望此修改可以通过多个(可能是所有)版本进行编写。我怎样才能用git实现这个目标?

例如,让我们考虑3个版本: v1 v2 v3 和源代码文件 source.cpp 其中包含大量不同版本的代码,但A类方法 aMethod()是相同的。我想更新方法并将更新写入 v1 v2 版本。

我该怎么办?
如果我修改 source.cpp ,例如,在 v1 中,将其合并到 v2 ,则会出现合并冲突(因为 source.cpp v1 v2 )中有所不同。有没有办法避免冲突?如果没有,在这种情况下处理合并冲突的最佳方法是什么? 顺便说一下,我不想增加代码粒度,以便将 aMethod()放在专用文件中,因为已经写了很多源代码,并且会有太多的开销为我所描述的任何此类修改执行此操作。

提前致谢,

丹尼尔

3 个答案:

答案 0 :(得分:3)

你试过git cherry-pick吗?如果你从分支v1到分支v2进行“git merge”,那么所有在v1中而不在v2中的提交将被合并,这不是你想要的。如果您只是通过更改来挑选单个提交,我认为不会发生合并冲突。

答案 1 :(得分:1)

如果你所做的优化大多是相互独立的,你可以从起点开始分支每个单独的优化,当你想测试一些组合时,从起点做另一个分支并做一个章鱼合并期望的优化。

答案 2 :(得分:0)

可以在单个源文件中测试各种替代方案。

正如您所指出的,git merge旨在使版本融合,这在分布式团队希望工作而不会踩到彼此脚趾时特别有用。

它无法帮助您保持文件清晰。樱桃挑选可以弥补差距,但不像darcs相当,它不使用历史,并可能在许多情况下不起作用。将您的次要更改引入主题分支可能会起作用,但您需要使它们依赖于早期的通用修订版,并且只能从它们合并而不是合并到它们中。

由于您可以控制所有内容,因此您可以测试不同的算法,同时保持它们的兼容和同步,并且您不需要多个分支。

相关问题