Wie kündigen Sie ein externes git diff?
Frage
Ich habe vim Setup als mein externes Diff-Tool:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
sagen, ich habe 300 Dateien, die geändert wurden; über Bash, I "git diff" eingeben. Es startet 300 vimdiffs der Reihe nach, wie kann ich es abbrechen?
Lösung
Wenn der Prozess zu stoppen ist nicht genug, zu töten die Schale selbst (in dem Sie die git diff
gestartet) könnte effektiver sein.
Siehe auch Git Diff mit vimdiff
Nicht bereit zu seinem volle Geschwindigkeit zu gehen, in
vimdiff
mit (ich bin gerade neu, um es), habe ich folgendes in ‚gitvimdiff
‘.
Das Ergebnis ist, dass ichvimdiff
zu sehen git-diff durch Ausführen von ‚gitvimdiff
‘, sondern ein normaler Aufruf von ‚git diff
‘ benimmt sich nutzen kann, wie ich gewohnt bin.
#!/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
Wenn Sie aber nach wie vor die modifizierte git diff
wollen, eine git status
könnte helfen, bevor es den Start;)
Und Sie können Setup eine Funktion, das alte git diff
Verhalten zu bekommen, wenn nötig:
Ich habe immer noch Zugriff auf das Standard-git diff Verhalten mit der
--no-ext-diff
Flagge. Hier ist eine Funktion, die ich in meinen Bash-Konfigurationsdateien setzen:
function git_diff() {
git diff --no-ext-diff -w "$@" | vim -R -
}
--no-ext-diff
: verhindern, dass mit vimdiff-w
: ignorieren Leerzeichen-R
: startet vim in Nur-Lese-Modus-
: to make vim wirken als Pager
Andere Tipps
Verwendung: cquit bis Ausfahrt vim mit einem Fehlercode. Git wird den Fehler erkennen und die Eröffnung neuer vimdiffs zu stoppen. Sie wollen wahrscheinlich eine Zuordnung für sie in Ihrem .vimrc erstellen:
if &diff
map Q :cquit<CR>
endif
Dann drücken Sie einfach Q zu früh abbrechen von einem git diff laufen.
Damit dies funktioniert, müssen Sie Ihre gitconfig bearbeiten müssen:
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
töten nur den übergeordneten Prozess. Öffnen Sie ein Terminal, Verwendung pstree -p
die Prozess-ID (PID) des git
Verfahren zu finden, kill -9
es dann. Auf meinem System es so etwas wie folgt aussieht:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
Nicht gerade elegant, aber es funktioniert. Auf Ihrem System pager
wird wahrscheinlich etwas anders sein, aber es wird git
als Eltern-Prozess hat.