tienes tag posible porque hacer fusionar crear consola conflictos archivos git merge mergetool

tag - ¿Cómo hago que git abra automáticamente la herramienta de mezcla si hay un conflicto de fusión?



resolver conflictos git (3)

Siempre puedes usar alias

alias ''git-merge''=''git merge && git mergetool'' alias ''git-rebase''=''git rebase && git mergetool'' alias ''git-pull''=''git pull && git mergetool''

Y / o escriba un script de ayuda en esta línea

#/bin/bash git $* [ "$(git ls-files –abbrev –unmerged | wc -l)" -gt 0 ] && git mergetool

y entonces

alias git=''~/.git/git-script''

No hay una forma directa de invocar mergetool, ya que es solo una de varias maneras de fusionarse (ver "CÓMO RESOLVER CONFLICTOS" en man 1 git-merge).

¿Cómo hago que git ejecute git mergetool automáticamente para cualquier conflicto de fusión? Esto debería aplicarse a todas las fusiones, utilizando merge , rebase , pull , etc.


Hasta donde yo sé, no hay forma de porcelana para hacerlo.

Puedes tener un wrapper alrededor de git como este (archivo git_mergetool.sh , en tu ruta, +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

Luego agrega un alias:

echo alias git=/"git_mergetool.sh/" >> ~/.bashrc

Cada vez que invocas git, el contenedor verifica si aparece la palabra "CONFLICTO". Si lo hace, wrapper lanza mergetool.

Esto se puede mejorar agregando una frase más precisa a $SEARCH (como "Falló la fusión automática; soluciona los conflictos y luego confirma el resultado") y también verifica si el primer argumento ( $1 ) está en la lista de comandos que resulta en un conflicto ( pull , merge , etc ...). De lo contrario, terminará analizando una gran cantidad de datos innecesarios si la salida del comando git es demasiado larga.


No puedes (todavía) hacer que Git haga esto.

Esto puede o no ser una solución aceptable.

Crea una función en tu ~/.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 no se invoca cuando se combina:

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

Se usa Mergetool cuando hay conflictos:

$ 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 no recibe otros errores:

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