代码之家  ›  专栏  ›  技术社区  ›  Jeff Ward

如何在不启动mergetool gui的情况下获取基本/远程/本地文件?

  •  0
  • Jeff Ward  · 技术社区  · 6 年前

    我甚至不知道怎么问这个问题…但也许:

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

    也就是说,我希望git创建(远程、本地、基本等)文件,然后让我返回到手动差异/合并的提示。然后 我想等我说完再告诉吉特。

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

    注: 这是一个 related question ,但1)它合并了重新定位(我没有重新定位),2)没有令人满意的答案,例如“选择任何合并工具并强制退出它。”:p

    1 回复  |  直到 6 年前
        1
  •  1
  •   torek    6 年前

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

    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 你会得到那些 .底座 我是说, .本地 ,和 .远程 你想要的文件。

    (或者你可以设置 merge.conflictStyle diff3 现在工作树文件已经包含了您需要的所有信息,所以不必再为上面的所有内容操心了。我就是这么做的。)