Git - 自动为冲突版本创建不同的文件

Kos*_*Kos 10 git version-control merge-conflict-resolution

当Git在合并期间检测到冲突时,默认行为是使用<<< >>> ===标记填充文件.

这在大多数情况下都可以,但有时候我想以不同的方式解决冲突,我只想让Git创建不同的文件:

  • 原始版本,
  • 改变版本A,
  • 更改版本B.

怎么实现呢?


如果没有简单的命令一次性创建这些文件(这有点令人惊讶),也许有一种方法来扩展Git以便它可以做到这一点?习俗mergetool还是什么?只是一个想法.


解:

我已经找到了@Karl Bielefeldt的答案:

savefiles.sh

#!bash
BASE=$1
LOCAL=$2
REMOTE=$3
MERGED=$4

cp "$BASE" "$MERGED.git_BASE"
cp "$LOCAL" "$MERGED.git_LOCAL"
cp "$REMOTE" "$MERGED.git_REMOTE"

# never mark the conflict as merged
exit 1 
Run Code Online (Sandbox Code Playgroud)

配置

mergetool.savefiles.cmd=/path/to/savefiles.sh $BASE $LOCAL $REMOTE $MERGED
mergetool.savefiles.trustexitcode=true
Run Code Online (Sandbox Code Playgroud)

Kar*_*ldt 6

创建一个savefiles.sh使用以下内容调用的文件:

#!/usr/bin/bash

cp $1 /path/to/BASE
cp $2 /path/to/LOCAL
cp $3 /path/to/REMOTE
Run Code Online (Sandbox Code Playgroud)

在存储库中执行以下命令:

git config mergetool.savefiles.cmd "/path/to/savefiles.sh \$BASE \$LOCAL \$REMOTE"
Run Code Online (Sandbox Code Playgroud)

--global如果要为此存储库以外的地方更改它,请添加一个.

然后运行此自定义合并工具,使用:

git mergetool --tool=savefiles
Run Code Online (Sandbox Code Playgroud)


Cha*_*esB 5

如果您想要不使用mergetool,只显示或保存您提到的状态的文件,索引将保留冲突文件的不同状态.您可以使用以下方式显示(并重定向到文件):

$ git show :1:file.txt  # the file in a common ancestor of both branches
$ git show :2:file.txt  # the version from HEAD.
$ git show :3:file.txt  # the version from MERGE_HEAD.
Run Code Online (Sandbox Code Playgroud)

但是,使用图形合并工具会显示冲突文件的3窗格视图.这通常是人们所做的,所以只需拿起你最喜欢的工具,看看如何将它与git mergetool电话联系起来.