2011-05-03 104 views
2

我現在用水銀從SVN工作....與SVN我從來沒有失去任何變更,合併是非常聰明的。在Mercurial的時候,我剛剛從主要的回購倉庫中抽出時間,當時我承擔了本地更改並覆蓋了本地更改。這裏的情景......水銀更改衝突

與file.php第250行是相同的。本地我添加了3個功能,這是因爲我正在使用特定功能。我承諾我的改變,忘了推到DEV。所以在DEV上我也增加了3個新功能。當地的3個功能(儘管是完全不同的)由上DEV 3個功能覆蓋...

我似乎無法想到的爲什麼會這樣一個合乎邏輯的理由......

我使用TortoiseHG,而不是命令行。

+2

嘿 - 我使用Mercurial,我從來沒有失去一個承諾的變化,雖然它有時看起來像它。如果你的東西被覆蓋,你告訴它必須與被合併的分支有關。您可以使用'hg serve'在http:// localhost:8000/graph /中獲取本地分支的視圖, – faester 2011-05-03 19:37:10

回答

3

您的描述中缺少一個步驟。通過描述,DEV從未看到所謂的丟失功能;它不能覆蓋它們。但是,您可以從DEV中獲取更改,使得工作分支與DEV相同,而您的本地提交是另一個分支。在這種情況下,您可以通過合併兩個分支來恢復它們。使用hg heads來確定是否有另一個未完成(未合併)的分支。 關鍵步驟是更新,如hg pull -uhg update -c,這會隱藏(但不會損壞)本地提交的作品。

編輯,因爲我看到你使用TortoiseHg:

TortoiseHg workbench顯示了樹相當不錯。如我所料,抽拉確實創建了分支,而新的技巧確實是我從單獨的存儲庫中抽取的技巧。工作臺顯示當前的工作目錄(如1+),所以你可以看到它來自哪個分支;嘗試選擇其他分支並選擇「與本地合併」來收集所有更改。

的原因水銀對你的哲學,而不是技術不會自動合併的事情。 cvs/svn工作流分支機構正在執行一個管理程序,並且每個對分支機構的提交都必須與中央存儲庫保持同步;因此所有更新都會合並。 Mercurial和git採用分支應該很容易的方法,並且您可以選擇何時以及是否將每個分支連接到任何其他分支,併爲分支給出名稱是一項單獨的任務。 TortoiseHg中的拉對話框可以嘗試使用Post Pull設置更新和自動解決合併衝突來更像CVS。

善變維基有an article on Mercurial workflows。特別是,CvsLikePractice或許可以解釋分支比一

1

什麼水銀命令你注意到,在您的本地版本的線條失蹤之前運行?

你從DEV做過hg pull嗎?

我還沒有看到水銀之前失去的變更是這樣,我想,如果你承諾的一切,你說變化是在文件歷史最低的地方。