8

我正在为我们的 cms(在 asp.net webforms 上运行)编写某种新的管理仪表板。由于各种原因,我们的一些较旧的服务器只能处理 .NET 2.0,因此我必须为此重写使用 lambda 表达式等的代码。

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

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

任何最佳实践或教程?

4

1 回答 1

13

是的,您可以为此使用 Mercurial。这是它的工作原理。

假设您当前的克隆被调用new-dot-net,因为它支持新的 .Net 版本。你克隆它并调用它 old-dot-net或类似的东西。这两个克隆现在是相同的,并且都针对 .Net 3.5。

现在小心地进行一些小改动,old-dot-net以使其与 .Net 2.0 兼容。当您进行更改时,两个克隆将开始分歧:

新点网:... [a] --- [b]

旧点网:... [a] --- [b] --- [c] --- [d]

在这里,您进行了[c]更改[d]集以添加 .Net 2.0 兼容性。请注意old-dot-net克隆如何包含更多的变更集,而不是new-dot-net因为它具有您希望在 中看到的向后兼容性更改new-dot-net。当您继续工作时,重要的是要考虑这一点:net-dot-net将包含old-dot-net. 变化从 new-dot-netold-dot-net,但从反向。

假设您在new-dot-net. 您进行了更改,new-dot-net现在情况如下所示:

新点网:... [a] --- [b] --- [x]

旧点网:... [a] --- [b] --- [c] --- [d]

您现在还想将更改反向移植到old-dot-net,更改为old-dot-net并从中提取net-dot-net

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

这将在以下位置创建一个新头old-dot-net

                             [X]
                            /
旧点网:... [a] --- [b] --- [c] --- [d]

因为[x]变更集具有[b]其父变更集。您现在有多个头,必须合并以减少头的数量。通过合并,您可以创建一个新的变更集,这是您说“这是如何[x]并且[d]应该合并”的方式。如果变更集只涉及到and [x] 中没有涉及的代码,那么合并应该可以正常工作。否则,您将看到一个合并工具并且必须解决冲突。您将合并提交为 chageset :[c][d][e]

                             [X]  -  -  -  -  -  -  - 。
                            / \
旧点网:... [a] --- [b] --- [c] --- [d] --- [e]

您已经完成了——您现在已经将[x]更改合并到您的 .Net 2.0 兼容代码中。

每次new-dot-net. 假设添加了更多功能:

新点网:... [a] --- [b] --- [x] --- [y] --- [z]

把它们拉进去后,old-dot-net你得到

                             [x] --------------.---- [y] --- [z]
                            / \
旧点网:... [a] --- [b] --- [c] --- [d] --- [e]

你现在合并[e][z]

                             [x] --------------.---- [y] --- [z]
                            / \ \
旧点网:... [a] --- [b] --- [c] --- [d] --- [e] ----------- [f]

要记住的重要部分是:

  • new-dot-net. _ _
  • 将更改拉old-dot-net
  • 永远不要old-dot-netto推动new-dot-net

如果您在某些时候发现new-dot-net不需要更改 in old-dot-net,那么您仍然需要将其拉入并合并它。但是你会做一个虚拟的合并。如果头是[w][g],并且你想保留[g],那么做

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

诀窍是在不关心结果的情况下进行合并,然后还原所有更改,并将未更改的工作副本提交为合并。这样你就可以告诉世界“ [w]and 的组合[g][g]”,也就是说,你扔掉[w]. 然后可以像往常一样合并new-dot-netafter中所做的新更改。[w]

于 2009-05-28T08:52:14.723 回答