如何在不启动mergetool GUI的情况下获取BASE / REMOTE / LOCAL文件?

时间:2018-07-11 15:22:21

标签: linux git command-line-interface mergetool

我也不确定如何问这个问题...但是也许:

我处于冲突状态。我想使用null-op/bin/bash作为合并工具。

也就是说,我希望git创建(REMOTE,LOCAL,BASE等)文件,然后将我放回提示进行手动差异/合并。接着 我想告诉git我什么时候完成。

我想要什么是mergetool,如何指定它?

注意:这是一个related question,但1)它使重新基准化(我不是重新基准化)变得平庸; 2)没有令人满意的答案,例如“选择任何mergetool并强制退出它。” :P

1 个答案:

答案 0 :(得分:1)

git mergetool是一个shell脚本(/ bin / sh;如果只有bash而没有普通的旧sh,则/ bin / bash可以运行它)。它:

  1. 从索引中提取三个文件(.BASE =阶段1条目,.LOCAL =阶段2条目,.REMOTE =阶段3条目)。第四个文件用作对合并工具的检查-如果您要手动进行合并,则不需要这样做。
  2. 使用第二个Shell脚本运行您选择的合并工具。
  3. 根据工具及其退出状态,询问您合并是否成功,或使用退出状态来确定合并是否成功。如果您同意,它将在合并的文件上运行git add
  4. 删除在步骤1中创建的文件。

它对所有未合并的文件循环执行此操作。

您的工作是修改该shell脚本,以便它提取三个文件并留下它们,即,执行(大部分)步骤1,然后完全不执行其余步骤。只需找到脚本(位于$(git --exec-path)/git-mergetool中)并将其复制到其他名称下,例如git-extract-unmerged,对其进行修改以使其符合您的期望,然后运行git extract-unmerged,您将拥有所需的.BASE.LOCAL.REMOTE文件。

(或者您可以将merge.conflictStyle设置为diff3,而不必为上述所有事情烦恼,因为工作树文件已包含您需要的所有信息。这就是我要做的。) / p>