如何以独立方式使用Xcode 4 mergetool?


8

有时我必须在控制台上进行git合并。到目前为止,为了解决冲突,我使用了Xcode 3的FileMerge(您可以使用“ opendiff”命令在控制台上将其打开)。如果显示冲突,则使用“ git mergetool”,它会为每个冲突文件自动调用opendiff。

但是,Xcode 4具有更好的mergetool组件来解决冲突。我相信该组件是Xcode 4可执行文件的一部分,而不是独立的。它使您可以预览合并的文件,并根据具体情况直接编辑合并的代码,这使合并复杂的冲突变得异常快速和令人满意。

从终端调用“ git mergetool”时,有什么方法可以使用Xcode 4 mergetool?

我在Xcode 4捆绑包中找不到该工具的可执行文件。任何达到此目的的技巧都将受到欢迎。


如果其他人对此功能感兴趣:似乎没有官方的方法。我通过bugreport向Apple提交了功能请求。这是雷达。我想这是完全没有希望的,但你永远不会知道。对于其他感兴趣的人,建议通过向Apple提交类似的错误报告表示兴趣。
里卡多·桑切斯·塞兹

Answers:


4

opendiff带有两个文件名参数,以及带有第三个文件名的--ancestor参数,以产生三向差异,以及--merge参数,表示用于解决冲突的输出文件。

去啊:

[mergetool "opendiff"]
    cmd = "opendiff \"$LOCAL\"  \"$REMOTE\" \"$(if test -f \"$BASE\"; then echo \"--ancestor $BASE\"; else echo \"--ancestor $LOCAL\"; fi)\" --merge=\"$MERGED\" "
[merge]
    tool = opendiff

当存在合并冲突时,这应该使git使用opendiff作为其合并工具。

就是说,我非常喜欢SourceGear的DiffMerge,它是一个免费的diff和三向合并工具,可以更好地解决面向单词的冲突。在DiffMerge的文档中,有什么要告诉git使其成为默认的差异和合并工具。


感谢您尝试提供帮助,但是Filemerge / opendiff不是我要使用的东西。另外,我尝试了DiffMerge(以及DeltaWalker的价值),但我不太喜欢它的UI。万花筒更好,但是它没有合并/编辑功能,只是显示差异。
里卡多·桑切斯·塞兹

我很确定Xcode 4只是包装了FileMerge。我发现万花筒同样令人失望。
丹·雷

我会说Xcode 4没有包装FileMerge。在FileMerge上,您无法编辑合并的文件,只需选择要用于每个冲突的合并的哪一侧。在Xcode 4拉冲突解决器上,您可以编辑冲突的行,并以所需的确切方式对文件进行拉。此外,UI与Filemerge完全不同。
里卡多·桑切斯·塞兹

1
Kaleidoscope 2 Beta最近发布,它允许对合并文件进行内联编辑。检查一下,这非常好。它唯一缺少的是冲突的颜色不同(它使用与代码替换相同的颜色)。
里卡多·桑切斯·塞兹

在使用Kaleidoscope几个月后,尽管它总体上还不错,但我不得不说,它仍然存在bug和/或令人困惑,特别是与Xcode 4.x解决冲突的组件相比时。仍然希望苹果做意外的事情,并将其实现为可从Tower等公司调用的独立工具。;-)
Ricardo Sanchez-Saez

0

您可以通过打开编辑器窗格在FileMerge中的(非常基本的)文本编辑器中进行编辑-默认情况下处于关闭状态。要在FileMerge中打开编辑器,请向上拖动中心diff列下方的点以打开编辑器窗格。


-1

最终为我工作

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

[mergetool "opendiff"]
  cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""

2
Opendiff是Xcode 3.x用于合并的内容。我的问题是关于Xcode 4.x合并组件的,它是一个完全不同的工具(与opendiff / filemerge不同,它允许对结果文件进行内联编辑)。不管怎么说,还是要谢谢你。
里卡多·桑切斯·塞兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.