windowsでgitするときにはGit Extentionsを使っています。

かなり便利だと思うんですがWord,Excel,PowerPoint等いわゆるバイナリファイルの差分表示ができません。

ということで、バイナリ→テキスト変換にApache Tikaを使って差分表示に挑戦します。

環境

Windows 7です。

Javaランタイム

1
2
3
4
c:\usr\bin>java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

インストールと動作確認

ダウンロードページの “Mirrors for tika-app-?.??.jar” から、コマンドラインで使えるjarをダウンロードします。

現時点でのバージョンはtika-app-1.14.jar。

C:\usr\binにダウンロードしました。

コマンドラインで実行してみます。

こまかい使い方はこちら

1
2
c:\usr\bin>java -jar tika-app-1.14.jar -V
Apache Tika 1.14

適当なofficeファイルを読み込ませてみて、テキストが出れば動作確認OK。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
c:\usr\bin>java -jar tika-app-1.14.jar --text "C:\temp\Office2010_compatibility_for_format_layout.docx"



Microsoft? Office 2010
ファイル フォーマット および
ドキュメント レイアウトの互換性について



20106 月

目次
はじめに        4
Microsoft Office 2010 で採用されているファイル形式      7
Open XML 形式について   7
互換モードと互換性チェック      11
Office 互換機能パックについて   16
Office 互換機能パック利用時の注意点     19
その他のアプリケーションのファイル形式について  25
Microsoft Office 2010 のセキュリティ    29
Microsoft Office 2010 のセキュリティの概要      29
セキュリティ センター   33
暗号化  34
Information Rights Management   39
...............................................

.gitconfigの設定

Windowsだと.gitconfigの場所を見失いがちですが、

1
git config --list --show-origin

で参照先が出たりでなかったりします。

うちの環境では C:\Users\%USERNAME%.gitconfig にありました。

diffの定義を追加します。

1
2
[diff "tika"]
  textconv = java -Dfile.encoding=UTF-8 -jar c:/usr/bin/tika-app-1.14.jar --text

Git Extentions内ではutf8を使ってるポイので”-Dfile.encoding=UTF-8″を追加してます。

.gitattributesの設定

ワーキングディレクトリに.gitattributesを追加して拡張子とdiff定義を関連付けます。

1
2
3
*.pptx diff=tika
*.docx diff=tika
*.xlsx diff=tika

グローバルな設定にできなくもないようですが、今回はレポジトリローカルで。

表示してみる

適当なword文書の差分を取ってみます。

出た。

ちょっと遅いっすね。

jarが50Mも有るんで、きびきびした動作は期待できないのかも。

バイナリ->テキスト変換ツールでもっと早いのがあれば差し替えると良いかと思います。

とはいえ、いちいちWinMergeとかの外部ツールを立ち上げるのも面倒なんで、これはこれで良いんじゃないでしょうか。