カテゴリー
Microsoft

【Git】【Windows】diff で Excel の違いを見られるようにする方法

環境

  • Windows7 Professional 32bit
  • git version 2.7.2.windows.1

1. Go 言語および git-xlsx-textconv の導入

コマンドプロンプトでの作業ですわ。

  1. go version コマンドで GO インストール有無を、go env GOPATH コマンドで GOPATH が設定されていることを、PATTH コマンドで %GOPATH%bin が設定されていることを確認。まだなら Go 言語のインストール、環境変数設定を行う。
  2. go get github.com/tokuhirom/git-xlsx-textconv
  3. git-xlsx-textconv.exe2016/03/05 08:21:47 Usage: git-xlsx-textconv file.xslx などと表示されることを確認

2. Git 設定

設定コマンド

設定ファイルへ反映するのに、次のコマンドを実行しました。

後述していますけれども、コマンドではなく設定ファイルの直接編集でも OK ですの♪

# [[diff "xlsx"]]
git config --global diff.xlsx binary false
git config --global diff.xlsx textconv '$GOPATH/bin/git-xlsx-textconv'
# 属性ファイルのひも付け
git config --global core.attributesfile 'C:/Users/username/.gitattributes'
  • 設定コマンドで を作成するには、既にあるものと捉えて diff.xlsx.binarydiff.xlsx.textconv を実行すればよい。
  • textconv はフォルダの区切り文字を ¥ にするとどうしても動かずダメだった。→ git config --global diff.xlsx.textconv '$GOPATH¥bin¥git-xlsx-textconv'
  • core.gitattributes は次だとダメだった。$USERPROFILE や $HOME を解決できいないっぽい。パスの区切りを ¥ から / へ変えればうまくいくかもしれないが、未検証。
    • git config --global core.attributesfile '"$USERPROFILE¥.gitattributes"'
    • git config --global core.attributesfile '"$HOME¥.gitattributes"'
    • git config --global core.attributesfile ¥"C:¥¥Users¥¥username¥¥.gitattributes¥"

設定ファイル

コマンドで行わずに、設定ファイルを直接編集しても同じ結果を得られますわ♪

下記を追加しました。

[core]
    attributesfile = C:/Users/username/.gitattributes
[[diff "xlsx"]]
    binary = true
    textconv = $GOPATH/bin/git-xlsx-textconv

属性ファイル

ユーザーのホームディレクトリにありませんでしたので次の内容で新規作成いたしました。

*.xlsx  diff=xlsx
*.XLSX  diff=xlsx
*.xlsm  diff=xlsx
*.XLSM  diff=xlsx

3. 確認手順

確認用のリポジトリを作成します。エクセルをコミット後、再度エクセルを編集して、git diff で違いが表示されることを確認します。

具体的には次の手順となりました♪

  1. 任意の場所で test_git-xlsx-textconv フォルダを作成し、そこで git init
  2. Book1.xlsx を作成し、ワークシートを適当に編集。例えば次。
No 項目
1 aaa
2 ビー
3 ccdc
  1. git add . でインデックスに追加し、git commit -m "最初のコミット" でコミット。
  2. Book1.xlsx を編集。例えば次
No 項目
1 aaa
2 bbb
3 ccc
4 ddd
  1. git diff で確認。次のように表示されれば OK
    $ git diff
    diff --git a/Book1.xlsx b/Book1.xlsx
    index eba3587..8ce27d2 100644
    --- a/Book1.xlsx
    +++ b/Book1.xlsx
    @@ -1,4 +1,5 @@
     [Sheet1] No    項目
     [Sheet1] 1     aaa
    -[Sheet1] 2     ビー
    -[Sheet1] 3     ccdc
    +[Sheet1] 2     bbb
    +[Sheet1] 3     ccc
    +[Sheet1] 4     ddd
    

バイナリファイルのため通常では比較できないエクセルでも、差分を表示することができるようになりました!

やったぜ!

ちなみに、今回の設定を行う前では、diff を行っても「違いがある」ということしかわかりませんでしたの><。

$ git diff
diff --git a/Book1.xlsx b/Book1.xlsx
index eba3587..8ce27d2 100644
Binary files a/Book1.xlsx and b/Book1.xlsx differ

おまけ。その他のポイント

  • git config コマンドや設定ファイルの編集で用いるパス・フォルダの区切り文字は、「¥」ではなく「/」を使うほうが事故が発生しにくかったり、悩みにくかったりして、よい。

おわりに

次のページが参考になりました!ありがとう存じます♪

本投稿の内容を設定するのに、なんやかんやで、数週間とものすごく時間がかかってしまいました><。

パスの区切り文字に悪戦苦闘しておりましたの!

おそらく Mac や Linux ではこの問題に悩まされることは無いのではないかしら?

以上です。

コメントを残す