如何在不启动 mergetool GUI 的情况下获取 BASE / REMOTE / LOCAL 文件?
How do I get BASE / REMOTE / LOCAL files without launching a mergetool GUI?
我什至不太确定如何问这个问题......但也许:
我处于冲突状态。我想使用 null-op
或 /bin/bash
作为我的合并工具。
也就是说,我希望 git 创建(REMOTE、LOCAL、BASE 等)文件,然后让我返回到手动差异/合并的提示。接着
我想在完成后告诉 git。
我想要的 mergetool 是什么,我该如何指定它?
注意:这是一个 related question,但是 1) 它混淆了变基(我不是变基),以及 2) 没有令人满意的答案,例如"choose any mergetool and force-quit it.":P
git mergetool
是一个 shell 脚本(/bin/sh;/bin/bash 可以 运行 它,如果你只有 bash 而不是普通的老 sh)。它:
- 从索引中提取三个文件(
.BASE
= 阶段 1 条目,.LOCAL
= 阶段 2 条目,.REMOTE
= 阶段 3 条目)。第四个文件用作对合并工具的检查——如果您要手动进行合并,则不需要此文件。
- 使用第二个 shell 脚本运行您选择的合并工具。
- 根据工具及其退出状态,询问您合并是否成功,或使用退出状态来决定合并是否成功。如果你说是,它 运行s
git add
在合并文件上。
- 删除它在步骤 1 中创建的文件。
它在循环中为所有未合并的文件执行此操作。
您的工作是修改 shell 脚本,以便它提取三个文件并保留它们,即执行(大部分)步骤 1,然后根本不执行其余步骤。只需找到脚本 — 它在 $(git --exec-path)/git-mergetool
中 — 并以另一个名称将其复制到其他地方,例如 git-extract-unmerged
,修改它以按照您想要的方式运行,然后 运行 git extract-unmerged
,您将获得所需的 .BASE
、.LOCAL
和 .REMOTE
文件。
(或者您可以将 merge.conflictStyle
设置为 diff3
而不必为以上所有操作而烦恼,现在工作树文件具有您需要的所有信息。这就是我所做的。 )
我什至不太确定如何问这个问题......但也许:
我处于冲突状态。我想使用 null-op
或 /bin/bash
作为我的合并工具。
也就是说,我希望 git 创建(REMOTE、LOCAL、BASE 等)文件,然后让我返回到手动差异/合并的提示。接着 我想在完成后告诉 git。
我想要的 mergetool 是什么,我该如何指定它?
注意:这是一个 related question,但是 1) 它混淆了变基(我不是变基),以及 2) 没有令人满意的答案,例如"choose any mergetool and force-quit it.":P
git mergetool
是一个 shell 脚本(/bin/sh;/bin/bash 可以 运行 它,如果你只有 bash 而不是普通的老 sh)。它:
- 从索引中提取三个文件(
.BASE
= 阶段 1 条目,.LOCAL
= 阶段 2 条目,.REMOTE
= 阶段 3 条目)。第四个文件用作对合并工具的检查——如果您要手动进行合并,则不需要此文件。 - 使用第二个 shell 脚本运行您选择的合并工具。
- 根据工具及其退出状态,询问您合并是否成功,或使用退出状态来决定合并是否成功。如果你说是,它 运行s
git add
在合并文件上。 - 删除它在步骤 1 中创建的文件。
它在循环中为所有未合并的文件执行此操作。
您的工作是修改 shell 脚本,以便它提取三个文件并保留它们,即执行(大部分)步骤 1,然后根本不执行其余步骤。只需找到脚本 — 它在 $(git --exec-path)/git-mergetool
中 — 并以另一个名称将其复制到其他地方,例如 git-extract-unmerged
,修改它以按照您想要的方式运行,然后 运行 git extract-unmerged
,您将获得所需的 .BASE
、.LOCAL
和 .REMOTE
文件。
(或者您可以将 merge.conflictStyle
设置为 diff3
而不必为以上所有操作而烦恼,现在工作树文件具有您需要的所有信息。这就是我所做的。 )