Kos*_*Kos 10 git version-control merge-conflict-resolution
当Git在合并期间检测到冲突时,默认行为是使用<<<
>>>
===
标记填充文件.
这在大多数情况下都可以,但有时候我想以不同的方式解决冲突,我只想让Git创建不同的文件:
怎么实现呢?
如果没有简单的命令一次性创建这些文件(这有点令人惊讶),也许有一种方法来扩展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)
创建一个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)
如果您想要不使用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
电话联系起来.
归档时间: |
|
查看次数: |
1271 次 |
最近记录: |