Dot-Net

您將如何使用 DVCS(在我的情況下為 Mercurial)為不同版本的 .NET 框架進行開發?

  • February 22, 2018

我正在為我們的 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-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]

引用自:https://stackoverflow.com/questions/919685