Comment annuler une diff git externe?
Question
J'ai la configuration vim comme mon outil de diff externe:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
Dire que j'ai 300 fichiers qui ont été modifiés; via bash, je tape "diff git". Il lance 300 vimdiffs séquentielle, comment puis-je désactiver?
La solution
En cas d'arrêt du processus ne suffit pas, en tuant la coquille elle-même (dans laquelle vous avez lancé git diff
) pourrait être plus efficace.
Voir aussi Git Diff avec Vimdiff
Ne pas être prêt à toute vitesse en utilisant
vimdiff
(je suis juste nouveau pour elle), je mets ce qui suit dans «gitvimdiff
».
Le résultat est que je peux utiliservimdiff
à regarder git-diff en exécutant «gitvimdiff
», mais une invocation normale de « se comporte degit diff
» que je suis habitué.
#!/bin/sh
if [ -n "${GIT_EXTERNAL_DIFF}" ]; then
[ "${GIT_EXTERNAL_DIFF}" = "${0}" ] ||
{ echo “GIT_EXTERNAL_DIFF set to unexpected value” 1>&2; exit 1; }
exec vimdiff “$2″ “$5″
else
GIT_EXTERNAL_DIFF=”${0}” exec git –no-pager diff “$@”
fi
Mais si vous voulez toujours le git diff
modifié, une aide pourrait de git status
avant de le lancer;)
Et vous pouvez configurer une fonction pour obtenir l'ancien comportement de git diff
si nécessaire:
J'ai toujours accès au git par défaut le comportement de diff avec le drapeau de
--no-ext-diff
. Voici une fonction que je mets dans mes fichiers de configuration de bash:
function git_diff() {
git diff --no-ext-diff -w "$@" | vim -R -
}
--no-ext-diff
: pour empêcher l'utilisation vimdiff-w
: ignorer les espaces-R
: pour commencer vim en mode lecture seule-
: faire acte vim comme un téléavertisseur
Autres conseils
Utilisation: cquit à vim de sortie avec un code d'erreur. Git détecte l'erreur et arrêter l'ouverture de nouveaux vimdiffs. Vous aurez probablement envie de créer un mappage pour dans votre .vimrc:
if &diff
map Q :cquit<CR>
endif
Alors vient de frapper Q au début abort d'un git run diff.
Pour que cela fonctionne, vous devez modifier votre gitconfig:
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
Il suffit de tuer le processus parent. Ouvrez un terminal, utilisez pstree -p
pour trouver l'ID de processus (PID) du processus de git
, kill -9
il. Sur mon système, il ressemble à ceci:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
Pas exactement élégant, mais cela fonctionne. Sur votre système, pager
sera probablement quelque chose de différent, mais il aura git
comme processus parent.