外部のdiffツールとしてvimをセットアップしました:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
変更されたファイルが300個あるとします。bash経由で、「gitdiff」と入力します。300個のvimdiffを順番に起動しますが、どうすれば中止できますか?
:cquitを使用して、エラーコードでvimを終了します。Gitはエラーを検出し、新しいvimdiffを開くのを停止します。おそらく、.vimrcにそのマッピングを作成することをお勧めします。
if &diff
map Q :cquit<CR>
endif
次に、Qを押すだけで、gitdiffの実行を早期に中止できます。
これを機能させるには、gitconfigを編集する必要があります。
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
プロセスを停止するだけでは不十分な場合は、シェル自体(を起動したシェルgit diff
)を強制終了する方が効果的な場合があります。
Vimdiffを使用したGitDiffも参照してください
フルスピードで使用する準備ができていないので
vimdiff
(私はそれを初めて使用します)、「<code>gitvimdiff」に次のように記述します。
その結果、vimdiff
「<code> gitvimdiff」を実行することでgit-diffを確認できますが、「<code>gitdiff」の通常の呼び出しは以前と同じように動作します。
#!/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
ただし、それでも変更が必要な場合はgit diff
、git status
起動する前に役立つ可能性があります;)
git diff
また、必要に応じて、古い動作を取得する関数を設定できます。
私はまだフラグを使ってデフォルトのgitdiffの振る舞いにアクセスできます
--no-ext-diff
。これが私がbash構成ファイルに入れた関数です:
function git_diff() {
git diff --no-ext-diff -w "$@" | vim -R -
}
--no-ext-diff
:vimdiffの使用を防ぐため-w
:空白を無視する-R
:vimを読み取り専用モードで起動する-
:vimをポケットベルとして機能させる
親プロセスを強制終了するだけです。ターミナルを開き、を使用pstree -p
してプロセスのプロセスID(PID)を検索しgit
、次にkill -9
それを検索します。私のシステムでは、次のようになります。
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
正確にはエレガントではありませんが、機能します。あなたのシステムでpager
は、おそらく何か違うものになるでしょうが、それはgit
親プロセスとしてあります。