分布式版本控制軟件水銀(Mercurial)使用指南4

merging

翻譯自:http://hginit.com/04.html

有時合并導(dǎo)致沖突。通常它們很容易解決,但你需要解決它們否則你的倉庫將會有多個頭。誰又想要多個頭呢?

版本控制一個非常重要的組成部分是在同一個代碼庫中進(jìn)行多人協(xié)同工作。

想象一下Rose和我都想對果醬食譜進(jìn)行修改。Rose提高了牛油果的品質(zhì)。在她開始工作前,她將從中央倉庫拉取所有的最新變動,以便自己在最新版本上工作。


現(xiàn)在看下編輯情況:


她提交并且推送這一變化到中央倉庫:


同時,我在這一文件的不同的地方做了一些更改:


我能夠提交,但是我不能夠推送到中央倉庫。


這也許是在水銀中最沒有用的錯誤信息,它應(yīng)該這樣說:


事實,那正是我將要做的:


好奇剛剛來了什么?輸入** hg log -P**。這一命令可以幫助你方便地查看。


事實上,那是Rose較早的改動,我的倉庫現(xiàn)在該怎么辦呢?


我有“多個頭”。本質(zhì)上,我的倉庫看起來如下:


看到兩個頭了嗎?這是因為Rose的改動是基于變更集7的,而我的改動也是基于變更集7的。所以現(xiàn)在有必要進(jìn)行合并。(千萬不要忽略它)


合并命令,hg merge,合并兩個頭,并將結(jié)果保存在我的工作目錄,它沒有提交,這給了一個機(jī)會讓我來檢查合并是否正確:


這看起來是對的,鱷梨是Hass,辣椒是胡椒,所以我將繼續(xù)下一步,將其推送到服務(wù)器。


我推送了兩個變更集:我原來的墨西哥胡椒變更,和之后的合并,這是它自己的變更集。

注意我倆各自的變更之間沒有沖突。因為我和Rose在修改配方的不同部分。所以合并非常容易。這是最常見的情況,因為在大多數(shù)組織中,每個程序員被分配在不同的代碼段進(jìn)行工作。

但是,即便是管理再好的、健康的組織,合并沖突時有發(fā)生,這時水銀會要求人為地來解決這些沖突。讓我們看看那是什么樣子的。

首先......我想要讓Rose的把我的變更集給拉下來:


現(xiàn)在,我們來看下將要發(fā)生什么,當(dāng)有一些沖突,我們都要修改一下配料。

我添加了一個香蕉:


我先檢查下香蕉的變化:


而Rose,在完全相同的一行添加了一個芒果。


確切地說是“ripe young mango”。


這次我先上傳了我的變更,所以Rose必須進(jìn)行合并。哈!


忽然,沖突被檢測到,并彈出一些合并沖突的解決工具,是不太友好的界面,但是他們通常是非好好用的,你能想到的功能都有。一個常見的合并沖突解決工具是 KDiff3, 如下:


在KDiff3中,你能看到4塊窗口,左上角是原始文件,上面中間部分顯示Rose的版本,右上方顯示我的版本。下面的窗口中是一個編輯器,Rose在這里解決沖突并構(gòu)建出合并的文件。

修改沖突是一個相對簡單的問題,要做的是遍歷每一個沖突并且做一個選擇題。Rose決定用香蕉芒果醬。


Rose保存了她的改動并且退出了KDiff3。


沖突解決了。

有一件事你要牢記:你不必按照任何人的時刻表去合并。你在任何時候都可以使用hg pull,如果你不想要合并沖突,你完全可以繼續(xù)工作,然后愉快地提交。等到你什么時候想合并了,你再合并。

自測

以下是你讀完本篇教程應(yīng)當(dāng)會做的事:

  1. 與他人在相同的代碼塊上工作。
  2. 獲得他人的變更。
  3. 推送你自己的變更。
  4. 解決合并沖突。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容