我如何使 Git 在任何合并冲突时自动运行 git mergetool
?这应适用于所有合并,包括使用 merge
、rebase
、pull
等。
你目前还不能让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
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'
没有直接调用合并工具的方式,因为它只是解决冲突的多种方式之一(请参见git-merge手册中的“如何解决冲突”)。
mergetool
。"多种合并方式中的其中一种"这个论点并不令人信服。是的,有多种方法,但选择一个作为默认值是相当合理的。 - Matthew Flaschen#!/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
(不带文件扩展名),并将其放在实际的 git 可执行文件之前的路径上。但这基本上只是另一种别名的方式。所以,不,我不知道有什么方法可以在不使用别名的情况下完成 git 的操作。 - Ruslan Osipov
post-checkout
(我不知道它在合并期间是否被实际调用。post-merge
需要成功合并)。 - Tobias Kienzlerpre-merge
钩子功能,在这种情况下,您当然可以根据配置设置让 git 在冲突时运行 mergetool... - Tobias Kienzler