Git でバージョン管理された Vim 内の複数のファイルを比較するために、vimdiff+ dirdiff.vimを使用しようとしています。
Mercurial の場合、mercurial extdiff拡張で可能です。
Vim を Git diff と統合するために Web で見つけた唯一の方法は、この投稿で説明されているように、単一のファイルで vimdiff を使用することです。
vimdiff + dirdiff + gitの使い方を知っている人はいますか?
Git でバージョン管理された Vim 内の複数のファイルを比較するために、vimdiff+ dirdiff.vimを使用しようとしています。
Mercurial の場合、mercurial extdiff拡張で可能です。
Vim を Git diff と統合するために Web で見つけた唯一の方法は、この投稿で説明されているように、単一のファイルで vimdiff を使用することです。
vimdiff + dirdiff + gitの使い方を知っている人はいますか?
git-diffall
私が必要としているものです、どうもありがとう。git difftool に関するこのページと、コマンド ラインからの vim+dirdiff の実行に関するこのページの助けを借りて、次のように書きました。$HOME/.gitconfig
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = vim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)' $LOCAL $REMOTE
[difftool]
prompt = false
git-diffall
myを入れた後 PATH
、たとえば作業ディレクトリとブランチdev
を次のように比較できます。
git diffall dev
これ--copy-back
は、Vim から永続的に作業ディレクトリを変更する場合にも必要です。
git diffall --copy-back dev
バージョン1.7.11以降、「git difftool」は「--dir-diff」オプションを学習し、物事を簡素化し、git-diffall
不要になりました。
.gitconfig
内容:
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = vim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)' $LOCAL $REMOTE '+syntax off'
たとえば、ブランチを使用した作業ディレクトリの差分は次のようにdev
実行されます。
git difftool -d dev
Tim Pope's fugitiveは、vim の典型的な git プラグインです。dirdiff の機能はないかもしれませんが、git status
出力を美しく統合し、変更されたファイル間を簡単にナビゲートするためのキー マッピングを備えています。出力にリストされているファイルgit status
は、マッピングと簡単に比較でき、変更に含まDれる正確な変更をカスタマイズできます。
( git 1.7.11、2012 年 6 月) 以降、git はディレクトリを比較できるようになったため (つまり、 を開く前に、比較するすべてのファイルを表示します) 、 Vim モジュール fugitiveのコミットを監視することは興味深いでしょう。difftool
git difftool
「ディレクトリを比較するには?」を参照してください。
したがって、その機能を に追加することfugitive.vim
は、ファイルからファイルへの差分アプローチからの進化になります。
ただし、Zyxはコメントでそのアプローチの限界を指摘しています。
これを機能させるために必要なのは次のとおりです。
git diff --name-status
とgit cat-file
、それ以上はありません (一部の
vimscript
コードを除く)。
そして、 とは異なり、これは vcsおよび vcsをサポートするgit difftool
すべての VCS で機能します。diff
cat-file
Zyx は、そのファイルごとのアプローチの例として、彼のプロジェクトaurumについて言及しています。
私のオーラムにはdirdiffのような機能があり(違いのあるファイルを表示
AuVimDiff full
するタブの束を開きますvimdiff
)、いかなる種類のdifftool
サポートも使用しませんでした。
(スクリプトを参照aurum / autoload / aurum / vimdiff.vim
)
Zyx は次のように付け加えます。
この機能を逃亡者に追加したい人にとっては、良いガイドにはなりません:
実際の呼び出しは、アクセスされた asgit diff --name-status
によって呼び出される関数の git ドライバー内に隠されています(mercurial は を使用していないため、これはかなり論理的だと思います)。 したがって、ここでは 3 つのレベルの抽象化をトラバースする必要があります (リポジトリ インターフェイス、シェル コマンド ラッパー、そして実際の git 呼び出しのみ)。 最初から全部書いた方が早いs:git.status
repo.functions.status
hg status -r rev1:rev2
hg diff --name-status
Git はディレクトリの差分を直接サポートしていませんが、サード パーティの拡張機能を使用して実行できます。
チェックアウトしてくださいgit diffall
(開示:私はこのスクリプトを書きました)。このスクリプトは、によって設定されたツールと連携してgit config diff.tool <TOOL>
、真のディレクトリ差分を実行します。
また、次の関連する質問も参照してください。