svn diffの代わりにvimdiffを使用するコード表示ツール
linuxでは、svn diffコマンドを直接使用してコードの修正を表示するのは難しいので、vimdiffをsvn diffのコードを表示するツールとして、特にvimに慣れている人にとって本当に便利なソリューションをネットで検索しました。
svn diffコマンドを使用してファイルの変更の前後を比較する場合、たとえば次のコマンドを実行します。
$ svn diff -r4420 ngx_http_limit_req_module.c
では、実際にはデフォルトのdiffプログラムに次のコマンドが送信されます。
-u -L ngx_http_limit_req_module.c (revision 4420) -L ngx_http_limit_req_module.c (working copy) .svn/tmp/tempfile.tmp ngx_http_limit_req_module.c
svn公式FAQにおけるsvn diffの解釈(中国語、英語):
外部のdiffコマンドを使用すると、Subversionは非常に複雑なコマンドラインを生成します。最初のパラメータは、特定の--diff-cmd、次に特定の--extensions(空白の--記号を使用する場合は拡張を無視しますが)、または--extensionsまたは--extensionsを空に指定しない場合は「-u」パラメータを追加します。3番目と4番目のパラメータはSubversionでは、1つの"-L"と1つ目のファイルのラベル(たとえば、"project_issues.html(revision 11209)")が渡されます。5つ目と6つ目は、もう1つの"-L"と2つ目のファイルのラベルです。7番目と8番目のパラメータは、それぞれ1つ目と2つ目のファイルの名前(たとえば、".svn/text-base/project_issues.html.svn-base"と“.svn/tmp /project_issues.html.tmp”)。
diffの内部呼び出しコマンドを理解するとvimdiffをdiffプログラムとして実装するのは簡単である.
vimdiffは、2つのファイルを比較する際に、この2つのファイルの経路とファイル名を知ればよい、すなわち、上記diff内部コマンドの7番目と8番目の2番目のパラメータである。
また、diff内部コマンドのパラメータが多すぎるため、vimdiffを--diff-cmdで直接呼び出すことはできないことも説明した(コマンドは以下の通り)。
$ svn diff --diff-cmd vimdiff -r4420 ngx_http_limit_req_module.c
だから、私たちは自分で別のスクリプトを書いて、このスクリプトをdiffプログラムとして、diffの内部コマンドを得て、それからその中の7番目と8番目のパラメータだけを取って、vimdiffに伝えて、このようにパラメータの多い問題を解決することができます。
#!/bin/sh # 去掉前5个参数 shift 5 # 使用vimdiff比较 vimdiff "$@"
スクリプト(diffwrap.sh)は次のとおりです。
また、svnは、svn diffを使用するたびにdiff-cmdを指定する必要がなく、プロファイルでdiffデフォルトプログラムを変更する機能も提供します。
修正~/.subversion/config、次の構成行を見つけます。
# diff-cmd = diff_program (diff, gdiff, etc.)
上のスクリプトのパスを追加すればいいです。たとえば、
diff-cmd = /usr/local/bin/diffwrap.sh
以降、svn diffコマンドを使用するとvimdiff比較2ファイルがデフォルトで開きます。
効果図: