2011-06-03 68 views
2

鑑於此庫:爲什麼Mercurial合併changeset包含沒有衝突的項目?

A1 - A2 - A3 - A4 - A5 

..你做hg pull這拉從遠程回購兩次變更,給你兩個頭:

A1 - A2 - A3 - A4 - A5 
     \ 
      B3 - B4 

比方說,你做hg merge它可以幫助您的M1 merge changeset

A1 - A2 - A3 - A4 - A5----\ 
     \     M1 
      B3 - B4 --------/ 

所以現在的hg out將列出M1 ...

如果你hg diff -c M1你看:

在B3和B4中添加的
  • 在B3和B4進行了修改,對文件中的DIFF對於其中有沒有衝突(文件沒有
    • 文件在A3-A5中修改)

    爲什麼M1合併變更集包含這些項目?爲什麼你需要將這個變更集推送到遠程存儲庫?

    這些更改已存在於遠程存儲庫中的B3和B4中。我明白爲什麼合併變更集會包含A3-A5和B3-B4中發生變化的文件,並導致新的合併版本的文件。但我不明白爲什麼變更集會包含沒有衝突的項目。 M3的推送不會複製已經在遠程回購中的更改嗎?

  • 回答

    5

    我能想到的最簡單的方法就是B3和B4有A2作爲其基礎上的修改。要將所有內容都恢復爲1而不是2,合併代表一個變更集,它將B3和B4中的所有更改都應用到A5之上。

    看起來像這樣的原因的另一部分是當你合併B4時你在A5。如果你已經在B4上並且合併,合併會在B4之上顯示A3,A4和A5的變化(當你調用hg diff -c M1時,你將在B4上)。

    否,推動合併不會真正重複任何你會發現多餘的變化。我看到重複更改的唯一時間是有人重新設置了他們從其他地方或已經推出的變更集。

    +0

    謝謝 - 仍然不完全確定爲什麼這不會重複遠程回購中的更改。我猜測混合中有一些Mercurial魔術。 – 2011-06-06 18:04:13

    1

    diff -c只會在變更集與其第一個(左側)父級(您的案例中的A5)之間創建差異。因此,它顯示了由於遠程合併而在分支上發生了變化的所有內容。

    +0

    'diff'是「查看」變更集內容的正確方法嗎? – 2011-06-07 17:25:14

    +1

    我會說'出口'應該採取那個點。然而,變更集的「內容」是一個相當哲學的問題。實際上,內容只是文件和元數據。 – Ringding 2011-06-08 06:58:43

    相關問題