バージョン管理システムによる差分を WinMerge などで表示する秀丸マクロ


このマクロを使うと、編集中のファイルの差分を WinMerge などですぐに確認できます。
Git, Mercurial, Subversion に対応しています。

ダウンロード

vcs_diff.mac

機能

  • 編集中のファイルの前回のコミットからの差分を WinMerge などで表示します。
  • 使用中のバージョン管理システムの種類は、編集中のファイルがあるフォルダを上へと遡り、以下のフォルダの内最初に見つかったものにより判断します。
    • .git
    • .hg
    • .svn

導入手順

  1. WinMerge など、お好きな差分表示ツールをインストールする。
  2. Subversion による差分を表示したい場合は、Win32Svn などのコマンドラインクライアントをインストールする。
    GIT と Mercurial も、もしコマンドラインクライアントがインストールされていなければ、インストールする。(GIT は msysgit インストール時のオプションで、Mercurial は TortoiseHg にコマンドラインクライアントが付属しています。)
  3. 利用しているバージョン管理システムに以下の様に設定を追加(コピペ)する。

    以下は差分表示に WinMerge を使う場合の設定です。
    ※WinMerge のパスが異なる場合には修正してください。

    • GIT

      %USERPROFILE%\.gitconfig に以下をコピペ

    • Mercurial

      %USERPROFILE%\mercurial.ini に以下をコピペ

    • Subversion

      次の一行からなるバッチファイルを作成

      %APPDATA%\Subversion\config ファイルの helpers セクションの diff-cmd キーの値に、作成したバッチファイルのパスを指定

変更履歴

Ver 1.7 (2014-02-14)

  • Git の差分表示時に --cached オプションを指定する機能を追加

Ver 1.6

  • ファイルが変更されていない場合は上書き保存しないように変更

Ver 1.5

  • ハイフンで始まるファイル名のファイルの差分を表示できなかったバグを修正

Ver 1.4

  • ファイル名に大文字が含まれているとき Git で差分が表示されない場合があったのを修正

Ver 1.3

  • ファイルのパスに \ と同じコードを含む全角文字が含まれていた場合の誤動作を修正
カテゴリー: 記事 タグ: , , , パーマリンク

13 Responses to バージョン管理システムによる差分を WinMerge などで表示する秀丸マクロ

  1. ピンバック: 秀丸エディタのお勧めの設定 | TipsZone

  2. あい のコメント:

    初めまして 仕事始めで「秀丸エディタのマクロライブラリ」から来ました。 私が使わせていただいている、数多くある便利なマクロの中でも片手に入る便利具合です。 これから長く使わせていただきます。ありがとうございます。

  3. あい のコメント:

    一点教えてください。 TortoiseSVNから「差分」でWinMergeを起動すると「表示」-「シンタックスハイライト」は「C/C++」がONですが、マクロから起動するとそこがOFFです。どうすればカラー化できるでしょうか?よろしくお願いします。

  4. NORI のコメント:

    とても嬉しいコメントありがとうございます!

    WinMerge は比較するファイルの拡張子をもとに、シンタックスハイライトの言語を選択しているようです。 したがって、このマクロから起動したかどうかに関わらず、ファイルの拡張子が c または cpp であれば、「C/C++」でシンタックスハイライトされると思います。 私のPCで試したところ、そのような結果が得られました。

    ご確認ください。

  5. あい のコメント:

    返信ありがとうございます。 そうですか。拡張子は、Cなので条件は同じですね。 ここから先はきっと、WinMergeの使い方になると思うので ヘルプを見るなりして研究してみます。 とりあえずは、起動後に設定を変更して運用します。

  6. NORI のコメント:

    以下の情報によると、やはり

    > 基本的にファイルの拡張子から自動で選択

    とのことです。

    コードの色付け (シンタックスハイライト)

    「シンタックスハイライトの有効化」のチェックがオフになっていたりするのでしょうか・・・

  7. あい のコメント:

    度々ありがとうございます。 リンク先の設定は、チェックが入っていました。一度外して終了して再起動後にONにしてから やり直してみましたが、変化ありませんでした。 WinMergeのタイトルバーに相違がありました。 TortoiseSVNから起動すると[hoge.C:作業ベース、リビジョン50-hoge.C:作業コピー]ですが マクロからだと[フルパス/hoge.C(revision 50)-フルパス] となっていました。(フルパスは、ドライブレタースラッシュ区切り) なぜ違ってくるのだろう・・・。

  8. NORI のコメント:

    う~ん、再現しないです。

  9. あい のコメント:

    お世話になります。上の投稿者「あい」です。 カラー化は、運用でカバーしていました。どうもありがとうございます。 さて、御多分に漏れずOS入れ換えを行い、WinXP32 → Win7Pro64 になりました。 現在環境を整えているのですが本マクロがどうしても起動しません。いや起動はしているのですが WinMergeが起動しません。

    コマンド部分を"svn --version"にしてアウトプットへ出力するとバージョン番号を正しく吐き出すので Subverionは動作しているようです。バッチファイルも作成して、configも書き換えました。 何処か確認するところはないでしょうか 以上よろしくお願いします。

  10. NORI のコメント:

    バッチファイルのパスに半角スペースが含まれている場合は、ダブルクォートで括って指定してください。 例) diff-cmd = "C:\Users\Owner\AppData\Roaming\Subversion\diff.bat"

    動作確認のため、コマンドプロンプト上で subversion の diff コマンドを実行してみてください。

    > svn diff -- "対象ファイルのパス"
  11. あい のコメント:

    ありがとうございます。二点確認しました。

    diff-cmd = "F:\DosTool\WinMergeSvn.bat" と記述してみましたが変化ありませんでした。 コマンドプロンプトから実行したところ、WinMergeが起動して、相違点がキチンと表示されました。 となると、マクロからの起動のみがNGってことになってしまいます。

    他に気が付くことがありましたら、お時間のあるときでけっこうですのでアドバイスをお願いします。

  12. あい のコメント:

    すみません。さっきのコメントを投稿した後でPCを再起動してみたらできました。 diff-cmd = "F:\DosTool\WinMergeSvn.bat" が良かったのだと思います。

    ありがとうございました。お騒がせしました。

  13. NORI のコメント:

    うまくいって良かったです。

コメントを残す