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?

War es hilfreich?

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.

http://trick.vanstaveren.us/wp/wp-uploads/2009/06/close-this -window.png


Siehe auch Git Diff mit vimdiff

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 ich vimdiff 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top