2009-05-28 24 views
8

我正在为我们的cms(它在asp.net webforms上运行)写一些新的管理仪表板。我们的一些旧服务器只能处理.NET 2.0出于各种原因,所以我不得不重写我的代码,它使用lambda表达式等。你将如何使用DVCS(在我的情况下为mercurial)开发不同版本的.NET框架?

我想知道如何使用像mercurial这样的dvcs来同时开发这两个版本。

我当前的代码库和mercurial存储库是针对.NET 3.5。我对mercurial比较陌生,我想我必须分支代码库?

任何最佳实践或教程?

回答

13

是的,你可以使用Mercurial。这是如何工作的。

假设您的当前克隆名称为new-dot-net,因为它支持新的.Net版本,因为它支持 。你做一个克隆,并称之为 old-dot-net或类似的东西。这两个克隆现在是相同的 和两个目标.Net 3.5。

现在仔细对old-dot-net进行小的更改,以使其与 .Net 2.0兼容。当您更改的两个克隆将 开始出现分歧:

 
new-dot-net: ... [a] --- [b] 

old-dot-net: ... [a] --- [b] --- [c] --- [d] 

在这里你做出[c][d]的变更,添加NET 2.0 兼容性。请注意0​​克隆如何包含更多 变更集,因为它具有向后兼容性 变更,即不需要想要在new-dot-net中查看。当您继续工作 时,请务必考虑这一点:net-dot-net将包含 old-dot-net中变更集的子集。变化从 new-dot-netold-dot-net,但从来没有在相反的方向。

假设您在new-dot-net中进行了新更改。你做出改变 在new-dot-net现在的情况是这样的:

 
new-dot-net: ... [a] --- [b] --- [x] 

old-dot-net: ... [a] --- [b] --- [c] --- [d] 

你现在想回港的变化old-dot-net还有,你 变化old-dot-netnet-dot-net拉:

% cd old-dot-net 
% hg pull ../new-dot-net 

这将创建一个new headold-dot-net

 
          [x] 
          /
old-dot-net: ... [a] --- [b] --- [c] --- [d] 

因为[x]变更集有[b],因为它是父变更集。你现在 有multiple heads,并且必须合并以减少头数 。通过合并您创建一个新的变更集,这是您的方式 说“这是如何组合[x][d]”。如果[x] 更改集只触及[c][d]中未触及的代码,则合并应该正常工作。否则,您将通过合并工具呈现 ,并且必须解决冲突。您提交 合并为chageset [e]

 
          [x] --------------. 
          /     \ 
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e] 

大功告成 - 现在你已经并入[x]变化到 您的.NET 2.0兼容的代码。

您每次在new-dot-net发生变化时都重复此操作。 比方说,更多的功能被添加:

 
new-dot-net: ... [a] --- [b] --- [x] --- [y] --- [z] 

拉他们到old-dot-net后你会得到

 
          [x] --------------.---- [y] --- [z] 
          /     \ 
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e] 

你现在合并[e][z]

 
          [x] --------------.---- [y] --- [z] 
          /     \    \ 
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e] ----------- [f] 

的重要组成部分记是这些:

  • 作出任何新功能new-dot-net
  • 变成old-dot-net
  • 从不强迫old-dot-netnew-dot-net

你应该在某个时候发现,在new-dot-net一个变化是old-dot-net需要不 ,那么你仍然需要把它拉在和合并 它。但是,你会做一个虚拟合并。如果磁头[w][g],并且要保持[g],然后做

% HGMERGE=true hg merge -y 
% hg revert --all --rev g 
% hg commit -m 'Dummy merge with y.' 

trick是做合并,而无需关心结果, 然后恢复所有的变更,并提交不变的工作副本 合并。这样你告诉世界“[w][g]的组合是[g]”,即你丢弃[w]中的变化。新增 之后new-dot-net所作的更改[w]之后可以合并为 正常。

+0

所以你不会使用分支机构?为什么不? – kitsune 2009-05-28 10:40:15

相关问题