簡體   English   中英

為什么Mercurial不能將我的XML文件與Beyond Compare合並?

[英]Why won't Mercurial merge my XML files with Beyond Compare?

我們的Mercurial存儲庫中有一堆XML文件。 當我們將這些文件中的更改從一個分支合並到另一個分支時, Mercurial抱怨我們的某些XML文件是二進制文件 ,並要求我在文件的本地版本和其他版本之間進行選擇。

我發現Mercurial認為其中任何帶有NULL字節的文件都是二進制文件,並且我們的某些XML文件編碼為UTF-16,因此包含很多NULL字節。 我的默認合並工具是Beyond Compare ,它可以處理UTF-16編碼的文件。 我已經按照Beyond Compare網站上的建議配置了Mercurial,但是在合並過程中,Mercurial表示:

工具bcomp無法處理二進制文件

是什么賦予了? 為什么Mercurial認為Beyond Compare無法合並我的文件?

推薦的Mercurial配置使用Beyond Compare作為合並程序,如下所示:

[merge-tools]
bcomp.executable = C:\Program Files\Beyond Compare 3\BComp.exe
bcomp.args = $local $other $base $output
bcomp.priority = 1
bcomp.premerge = True
bcomp.gui = True

[ui]
merge = bcomp

根據Mercurial關於合並工具的文檔 ,有一個binary選項默認為False binary=True ,它告訴Mercurial該工具可以合並二進制文件。 但是,當我打開該選項時,Mercurial仍然不會讓Beyond Compare合並XML文件。

更多的研究發現了premerge選項。 premerge=True ,Mercurial 首先在內部進行合並,並且僅在存在要解決的沖突時才使用合並工具。 不幸的是,Mercurial始終無法合並二進制文件。 當預合並失敗時,Mercurial停止該文件的合並,並且從不啟動合並工具。

因此,解決方案似乎是還將premerge選項設置為False 不幸的是,預合並非常有幫助,因為90%的時間里沒有任何沖突,並且從未看到過合並工具。 將premerge設置為False ,每次需要合並時,就會打開Beyond Compare。 這變得非常乏味。

為了解決這個問題, 我創建了第二個Beyond Compare合並工具配置,該配置用於合並二進制文件 我將其優先級設置為低於默認的bcomp工具,因此只有在主bcomp工具出現故障時才會調用它,通常僅適用於二進制文件。 我將這些行添加到了mercurial.ini文件的merge-tools部分中:

bcompbin.executable = C:\Program Files (x86)\Beyond Compare 3\BCompare.exe
bcompbin.args = $local $other $base $output
bcompbin.gui = True
bcompbin.premerge = False
bcompbin.binary = True

這樣做的副作用之一是,“超越比較”將啟動以合並它無法處理的二進制文件。 我還沒有遇到這種情況,所以不知道如何處理。 我可能只是暫時注釋掉我的bcompbin合並工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM