29

git mergetoolマージの競合に対してgit を自動的に実行するにはどうすればよいですか? mergeこれは、rebasepull、 などを使用するすべてのマージに適用されます。

4

3 に答える 3

8

(まだ) 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
于 2013-07-17T07:35:13.543 に答える
4

いつでもエイリアスを使用できます

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 を呼び出す直接的な方法はありません。これは、いくつかあるマージ方法の 1 つにすぎないためです (man 1 git-merge の「競合を解決する方法」を参照してください)。

于 2012-04-05T16:46:59.863 に答える
2

私の知る限り、それを行う磁器の方法はありません。

次のように 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 を呼び出すたびに、ラッパーは「CONFLICT」という単語が表示されるかどうかを確認します。存在する場合 - ラッパーは mergetool を起動します。

$SEARCHこれは、 (「Automatic merge failed; fix conflicts and then commit the result.」など) により正確なフレーズを追加することと、最初の引数 ( $1) がマージの競合( pull、、merge等...)。そうしないと、git コマンドの出力が長すぎると、多くの不要なデータを解析することになります。

于 2013-07-12T16:52:56.047 に答える