代码之家  ›  专栏  ›  技术社区  ›  kitsune

您将如何使用dvcs(在我的例子中是mercurial)为不同版本的.NET框架开发?

  •  8
  • kitsune  · 技术社区  · 16 年前

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

    我想知道如何使用Mercurial这样的DVC同时开发这两个版本。

    我当前的代码库和Mercurial存储库的目标是.NET 3.5。我对Mercurial还比较陌生,我想我必须扩展代码库?

    有什么最佳实践或教程吗?

    1 回复  |  直到 7 年前
        1
  •  13
  •   Vadim Kotov First Zero    7 年前

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

    假设您当前的克隆名是 new-dot-net 因为它 支持新的.NET版本。你复制了它并称之为 old-dot-net 或者类似的。两个克隆现在是相同的 两个目标都是.NET 3.5。

    现在小心地在 老网点 为了成功 .NET 2.0兼容。当您进行更改时,两个克隆将 开始偏离:

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

    这是你做的 [c] [d] 要添加.NET 2.0的变更集 兼容性。注意如何 老网点 克隆包含更多 变更集比 新网点 因为它具有向后兼容性 改变了你 想看进去 新网点 . 当你继续 工作中,考虑到这一点很重要: net-dot-net 将包含 中变更集的子集 老网点 . 变化从 新网点 老网点 但是 从未 在相反的方向。

    假设你在 新网点 . 你做了改变 在里面 新网点 现在的情况是这样的:

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

    你现在想把更改返回到 老网点 还有,你 改为 老网点 从中拉出 网点网 :

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

    这将创建一个 new head 在里面 老网点 :

                                 [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: ... [a] --- [b] --- [x] --- [y] --- [z]
    

    把他们拉进去之后 老网点 你得到

                                 [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]
    

    要记住的重要部分是:

    • 制作任何 新特点 在里面 新网点 .
    • 变为 老网点
    • 永不推 老网点 新网点 .

    你是否应该在某个时候发现 新网点 不是 需要在 老网点 ,然后您仍然需要将其拉入并合并 它。但是你会做一个 虚拟合并 . 如果头是 [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] . 新的 变化在 新网点 之后 [W] 然后可以像 正常的。