如何让我如果有合并冲突的git自动打开合并工具?(How do I make git automat

2019-07-28 19:43发布

如何使git的自动运行git mergetool的任何合并冲突? 这应该适用于所有的合并,使用mergerebasepull等。

Answer 1:

你不能(还)让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
}

当合并合并工具,则不会调用:

$ git merge non_conflicting_branch
Merge made by the 'recursive' strategy.
 bar | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar

当有冲突合并工具被称为:

$ 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!!!

合并工具不叫上其他错误:

$ git merge adasds
fatal: adasds - not something we can merge


Answer 2:

你总是可以使用别名

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'

有调用合并工具的没有直接的方法,因为它仅仅是几种方法来合并一个(见“如何解决冲突”,在男子1混帐合并)。



Answer 3:

据我所知,目前还没有瓷器办法做到这一点。

你可以有一个包装周围的Git这样的(文件git_mergetool.sh ,你的路径上, +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的时间,包装将检查单词“冲突”弹出。 如果确实如此 - 包装推出合并工具。

这可以通过添加更精确的短语还有待提高$SEARCH (如“自动合并失败;解决冲突,然后提交结果。”)通过检查,以及如果第一个参数( $1 )是导致合并冲突的命令列表( pullmerge ,等等)。 否则,你最终会解析了很多不必要的数据,如果混帐命令输出太长。



文章来源: How do I make git automatically open the mergetool if there is a merge conflict?