您將如何使用 DVCS(在我的情況下為 Mercurial)為不同版本的 .NET 框架進行開發?
我正在為我們的 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-netto推動new-dot-net。如果您在某些時候發現
new-dot-net不需要更改 inold-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]