2012-01-25 145 views
12

我對Mercurial和Python感到沮喪,因爲它讓事情變得很容易。我有一個小小的衝突,因爲水銀不給任何建議做我甚至不知道如何解決這個簡單的文件衝突:如何解決這個Mercurial衝突?

KDiff3

的衝突是微不足道的,但如果我解決不了這我也解決不了任何複雜的問題。我可以按照我想要的方式編輯文件並從任何地方再次提交嗎?我應該跑hg merge?爲什麼Mercurial甚至不能讓我選擇一個版本來保存?爲什麼沒有挖掘1000個寫得不好的手冊是不可能做到的事情?

+1

只是爲了記錄,這不是關於Mercurial和Python使事情變得困難,而是關於'kdiff3'程序的使用。 – Tobias

回答

24

您需要查看KDiff3 documentation,特別是關於merging and the output window的部分。要解決衝突,您需要確定livejanuary是否是該行的正確選擇。這個決定是你自己做的,沒有工具可以知道你是否意味着這個或那個。

在KDiff3,按下Ctrl鍵+ 到選擇live,按Ctrl鍵+ 到選擇在窗口底部的邊緣january或右鍵單擊,然後選擇你想要的行。您也可以點擊底部窗口並手動編輯該行。

Mercurial讓你configure your merge tool任何你喜歡的方式。 TortoiseHg提供了一個默認配置,可以將KDiff3置於列表頂部,但如果您願意,您可以使用其他工具。合併工具實際上只是一個接受四個文件名的程序:要比較的三個文件(base,parent 1,parent 2)和一個輸出文件名。

要解決命令行上的衝突,您需要啓動合適的命令行三向合併工具。如果你喜歡,你可以例如merge with vim。 (恐怕我不知道Vimdiff可以任何東西,我用KDiff3自己。)

如果你不喜歡看合併工具彈出,那麼你可以設置

[ui] 
merge = internal:merge 

使Mercurial僅使用內部三路合併器。當編輯沒有衝突時它會合並文件。當發生衝突時,文件被標記爲「未解決」,衝突標記存儲在文件中。

然後您需要手動編輯文件以獲取所需的版本。您也可以重新合併,並選擇在本地(你的)版本:

$ hg resolve --tool internal:local your-file 

或其它版本:

$ hg resolve --tool internal:other your-file 

您與hg resolve your-file完全重新啓動合併。在提交之前,文件需要標記爲「已解決」。這是通過hg resolve --mark your-file完成的。有關當前合併的狀態,請參閱hg resolve --list

+0

謝謝Martin。如果可行的話,我也希望能夠在命令行解決問題。 –

+1

你說得對 - KDiff3沒有最直觀的界面。你會發現,在一段時間後感覺非常簡單,但很容易忘記它在第一次彈出時是如何嚇唬屏幕的。順便說一下,您還可以使用工具欄中的「A」,「B」和「C」按鈕來決定保留哪個位。 –

+0

@NickRosencrantz:我已經添加了一些關於如何配置合併工具的信息。 –

19

基礎版是您本地系統中的以前版本, 父母1是您當前的更改, 父母2是來自服務器的文件。

如果您需要更改需要簽入,請在合併菜單的任意位置選擇B. 如果您想要本地機器上的最新服務器版本,請在合併菜單中的任意位置選擇C

+5

謝謝!你怎麼知道「基地」是以前的版本?用google搜索了一個小時以瞭解神祕而毫無意義的「基礎」,「父母1」,「父母2」的話,天​​哪! – Slav