如何让git自动运行git mergetool
以解决任何合并冲突?这应该适用于所有合并,使用merge
,rebase
,pull
等。
答案 0 :(得分:7)
你不能(还)让git这样做。
这可能是也可能不是可接受的解决方法。
在~/.bashrc
:
git()
{
if [[ $1 == "merge" ]] || [[ $1 == "rebase" ]] || [[ $1 == "pull" ]]; then
command git "$@"
rc=$?
if [[ $rc == 1 ]]; then
echo "There are conflicts, better run git-mergetool!!!"
# There might be some other condition that returns a '1',
# if so you can add another check like this:
# if grep Conflicts $(git --git-dir)/MERGE_MSG;
command git mergetool
fi
else
command git "$@"
fi
}
合并时不会调用Mergetool:
$ git merge non_conflicting_branch
Merge made by the 'recursive' strategy.
bar | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bar
当存在冲突时调用Mergetool:
$ git merge conflicting_branch
Auto-merging foo
CONFLICT (content): Merge conflict in foo
Automatic merge failed; fix conflicts and then commit the result.
There are Conflicts, better run git-mergetool!!!
没有在其他错误上调用Mergetool:
$ git merge adasds
fatal: adasds - not something we can merge
答案 1 :(得分:3)
您可以随时使用别名
alias 'git-merge'='git merge && git mergetool'
alias 'git-rebase'='git rebase && git mergetool'
alias 'git-pull'='git pull && git mergetool'
和/或沿着这些行写一个帮助脚本
#/bin/bash
git $*
[ "$(git ls-files –abbrev –unmerged | wc -l)" -gt 0 ] && git mergetool
然后
alias git='~/.git/git-script'
没有直接调用mergetool的方法,因为它只是合并的几种方法之一(参见man 1 git-merge中的“如何解决冲突”)。
答案 2 :(得分:2)
据我所知,没有瓷器方法可以做到。
你可以在你的路径git_mergetool.sh
上有这样的git包装(文件+x
):
#!/bin/bash
SEARCH="CONFLICT"
OUTPUT=$(git "$@" 2>&1 | tee /dev/tty)
if `echo ${OUTPUT} | grep -i "${SEARCH}" 1>/dev/null 2>&1`
then
git mergetool
fi
然后添加别名:
echo alias git=\"git_mergetool.sh\" >> ~/.bashrc
每次调用git时,包装器都会检查是否弹出“CONFLICT”字样。如果是这样 - 包装器启动mergetool。
这可以通过向$SEARCH
添加更精确的短语来改进(例如“自动合并失败;修复冲突然后提交结果。”)以及检查第一个参数($1
)在命令列表中导致合并冲突(pull
,merge
等...)。否则,如果git命令输出太长,最终将解析大量不必要的数据。