外部Git Diffをキャンセルするにはどうすればよいですか?
質問
外部DIFFツールとしてVIMのセットアップがあります。
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
変更された300個のファイルがあるとします。 bashを介して、「git diff」と入力します。 300個のVimdiffsを順番に起動しますが、どのように中止しますか?
解決
プロセスを停止するだけでは不十分な場合は、シェル自体を殺します( git diff
)より効果的かもしれません。
参照してください vimdiffを使用したgit diff
使用する準備ができていない
vimdiff
(私はそれが初めてです)、私は次のものを入れます 'gitvimdiff
’.
その結果、使用できますvimdiff
実行してgit-diffを見るgitvimdiff
'、しかし通常の呼び出し'git diff
'私が慣れているように振る舞います。
#!/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
, 、a 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にポケットベルとして機能させる
他のヒント
使用:cquitエラーコードでVIMを終了します。 GITはエラーを検出し、新しいVimdiffsの開設を停止します。あなたはおそらくあなたの.vimrcでそれのマッピングを作成したいと思うでしょう:
if &diff
map Q :cquit<CR>
endif
その後、Qを押して、Git Diff Runから早期中止します。
これが機能するには、gitconfigを編集する必要があります。
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
親のプロセスを殺すだけです。端末を開き、使用します pstree -p
のプロセスID(PID)を見つけるには git
その後、プロセス kill -9
それ。私のシステムでは、次のように見えます:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
正確にはエレガントではありませんが、機能します。あなたのシステムで、 pager
おそらく何か違うものになるでしょうが、それは持っているでしょう git
親プロセスとして。