我正在为我们的 cms(在 asp.net webforms 上运行)编写某种新的管理仪表板。由于各种原因,我们的一些较旧的服务器只能处理 .NET 2.0,因此我必须为此重写使用 lambda 表达式等的代码。
我想知道您将如何使用像 mercurial 这样的 dvcs 同时开发这两个版本。
我当前的代码库和 mercurial 存储库针对 .NET 3.5。我对 mercurial 比较陌生,我想我必须分支代码库?
任何最佳实践或教程?
我正在为我们的 cms(在 asp.net webforms 上运行)编写某种新的管理仪表板。由于各种原因,我们的一些较旧的服务器只能处理 .NET 2.0,因此我必须为此重写使用 lambda 表达式等的代码。
我想知道您将如何使用像 mercurial 这样的 dvcs 同时开发这两个版本。
我当前的代码库和 mercurial 存储库针对 .NET 3.5。我对 mercurial 比较陌生,我想我必须分支代码库?
任何最佳实践或教程?
是的,您可以为此使用 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-net
到old-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-net
to推动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-net
after中所做的新更改。[w]