2010-11-17 68 views
1

如果我提交文件重命名並使用extdiff在Beyond Compare或kdiff3中查看diff,它們會在每一面顯示兩個不同的文件。如何讓mercurial外部diff工具處理文件重命名?

使用Beyond比較,我可以手動從每邊比較挑任意文件,但它是一個巨大的痛苦,如果我有很多重命名(即改變爲重構一個Java包的名字)。

我明白爲什麼會這樣:extdiff僅爲diff工具創建兩個臨時快照目錄。

所以我的問題是:有沒有辦法傳達重命名爲比較工具,例如,將與新的文件名比較老的文件名?

這可能是特定於每個diff工具。所以如果你知道一個支持它的工具,請告訴我。

回答

0

處理重命名需要挖掘一個典型的scm具有的歷史。特別是像Mercurial的dvcs。那就是這樣,他們可以處理重命名。

一些有趣的事情可能是事實,Git不會跟蹤重命名,內容運營和重命名並不重要。

Diff工具可以處理檢查的更改,但它可以不告知其中的文件。用前面的歷史記錄來判斷文件是否被重命名也是錯誤的。任何外部差異工具通常會檢查內容,因此提供文件的任務將保留給用戶。

Mercurial如何做跟蹤重命名。請參閱可用於跟蹤重命名文件的this extentsion。您可以使用它來提供任何外部差異工具正確的文件名進行比較。

+0

我知道hg曲目重命名,所以我問的是一種有點自動的方式來「提供任何外部差異工具的正確的文件名進行比較」。爲此編寫一個小擴展並不難,但棘手的部分是告訴該工具顯示該對,以及沒有重命名的文件中的其他更改。 – 2010-11-17 18:45:41

1

注意這僅適用於與TortoiseHg diff文件。

我已經配置了我的水銀安裝,與超越的方式比較3,如下:

(注意,這些只是相關diff和合並的選項,你還需要一些其他選項相同的部分,所以只能添加或更改,沒有清除舊的部分,並與下面的)

 
[ui] 
merge = bc3m 

[extensions] 
extdiff= 

[extdiff] 
cmd.bc3d = C:\Program Files (x86)\Beyond Compare 3\bcomp.exe 
opts.bc3d = /lro 

[merge-tools] 
bc3m.executable = C:\Program Files (x86)\Beyond Compare 3\bcomp.exe 
bc3m.args = $local $other $base $output /automerge /reviewconflicts /closescript /lro /rro /title1="Left parent" /title2="Right parent" /title3="Common base" /title4="Merged output" 
bc3m.priority = 1 
bc3m.premerge = True 
bc3m.gui = True 

[tortoisehg] 
vdiff=bc3d 

這就是現在更換:

  • 自動合併如果可能的話,不顯示合併-G UI除非有合併衝突
  • DIFF爲重命名的文件顯示在左側的舊文件名,並在右邊新建一個(時髦的臨時目錄的名稱雖然)

重要提示:不要爲合併工具和diff工具使用相同的名稱(例如bc3)。它混淆了所涉及的工具,並將其差異化爲卑詩省的啓動屏幕。這就是合併工具名爲bc3m而diff工具名爲bc3d的原因。

另外請注意,我已經使用內置的beyondcompare工具丟棄,因爲他們似乎配置不正確。特別是,使用內置工具時,自動合併部分不會發生,但現在可以很好地工作。此外,使用內置工具,通過重命名可視化差異顯示目錄比較,或者只是踢到BC的啓動屏幕,這使您可以選擇所需的比較類型。

所以最後我只是試驗,直到我找到正確的選項,並設置好自己。

+0

你的意思是這樣做:'mkdir rename; cd重命名; hg init;觸摸file1; hg ci -A -m file1; hg mv file1 file2; hg ci -m file2; hg bc3d -r0:1'會比較file1和file2嗎?不幸的是,你的配置不適合我。 – 2010-11-17 18:40:25

+0

讓我測試一下這個場景,我並不是說它會處理所有的情況,但我所做的重命名似乎有效。 – 2010-11-17 18:48:29

+0

對不起,我總是使用TortoiseHg,如果我在1-revision上使用「Visualize Change」,請在彈出的對話框中選擇「A file2」條目,它在左窗格中顯示file1,在右邊顯示file2窗格。 – 2010-11-17 18:50:26