← 記事

epubファイルをgit diffする方法

epub、docx、pptx、SQLiteファイルをGitで追跡する

私はバイナリー形式があまり好きではありません。変更を追跡しにくいからです。幸い、epub、docx、pptx、さらにはSQLiteデータベースのようなバイナリーファイルもGitで扱い、管理しやすくする方法があります。この記事では、こうしたバイナリー形式をgit diffし、バージョン管理できるようにするテクニックを紹介します。

バイナリー形式ごとのGitの設定

ZIPベースのファイル形式を追跡する

tante.ccの記事にもあるように、docxやpptxなどのバイナリー形式は、実質的にはXMLファイルをZIPでまとめたものです。つまり、ある程度の差分表示が可能です。Gitでこれらの形式を扱えるようにするには、次の手順に従います。

Windowsユーザーの方へ:Windowsでは、~/.config/git/attributesというパスは\.config\git\attributesに相当します。はWindowsユーザーアカウントのホームディレクトリー(C:\Users\)です。

  1. ~/.gitconfigファイルを開き(なければ作成し)、次の設定を追加します。

    [diff "zip"]
    textconv = unzip -c -a
    

    この設定により、差分を取るときにunzipコマンドでZIPファイルをASCIIテキストに変換するようGitに指示します。

  2. YOUR_GIT_REPOSITORY/.gitattributesまたは~/.config/git/attributesファイルを作成または編集し、次の行を追加します。

    *.pptx diff=zip
    *.docx diff=zip
    *.epub diff=zip
    *.odt diff=zip
    

    これらの行で、どの拡張子のファイルをGitがZIP形式として差分処理するかを指定します。

これでgit diffを使うと、Gitがこれらのファイルを自動的に展開してASCIIの差分を表示してくれるので、こうしたバイナリー形式の変更を追跡しやすくなります。

古いMicrosoft Officeファイルを扱う

.doc、.xls、.pptなどのMicrosoft OfficeファイルもGitで扱えるように設定できます。手順は次のとおりです。

  1. $HOME/.config/git/attributesファイルに次の行を追加します。

    *.doc diff=doc
    *.xls diff=xls
    *.xlsx diff=xls
    *.ppt diff=ppt
    

    これで、これらの拡張子が特定の差分設定に関連付けられます。

  2. グローバル設定ファイル$HOME/.gitconfigまたは$HOME/.config/git/configに次の内容を追加します。

    [diff "word"]
      textconv = catdoc
      binary = true
    [diff "xls"]
      textconv = xls2csv
      binary = true
    [diff "ppt"]
      textconv = catppt
      binary = true
    

    これらの設定では、ファイル形式ごとに異なるテキスト変換ツールを使い、差分を読みやすくします。

古いOpenOfficeファイルを扱う

OpenOfficeを使っている場合も、Microsoft Officeファイルと同様の方法が使えます。手順は次のとおりです。

  1. attributesファイルに次の行を追加します。

    *.odt diff=odt
    

    これで、.odt拡張子が差分設定に関連付けられます。

  2. configファイルに次の内容を追加します。

    [diff "odt"]
        textconv = odt2txt
        binary = true
    

    この設定では、差分を取るためにodt2txtで.odtファイルを変換します。

PDFファイルを扱う

PDFファイルもGitで管理できます。そのためには、attributesファイルに次の変更を加えます。

*.pdf diff=pdf

configファイルには次の内容を追加します。

[diff "pdf"]
  textconv = pdf2txt.py
  binary = true

この設定により、GitはPDFからテキストを抽出して差分を表示できます。

SQLiteデータベースの変更を追跡する

SQLiteデータベースはバイナリーファイルなので、変更の追跡は難しいことがあります。それでも、GitでSQLiteデータベースの意味のある差分を得ることができます。手順は次のとおりです。

  1. 設定に「sqlite3」という差分タイプを追加します。

    git config diff.sqlite3.binary true
    git config diff.sqlite3.textconv "echo .dump | sqlite3"
    

    あるいは、~/.gitconfigまたはリポジトリの.git/configに次のスニペットを追加します。

    [diff "sqlite3"]
      binary = true
      textconv = "echo .dump | sqlite3"
    
  2. .gitattributesというファイルがなければ作成し、次の行を追加します。

    *.sqlite diff=sqlite3
    

これで、SQLiteファイルに対してgit diffなど差分を生成するGitコマンドを実行すると、変更内容がきれいに整形された差分として表示され、SQLiteデータベースの変更を追跡しやすくなります。

まとめ

この記事では、epub、docx、pptx、SQLiteデータベースなどのバイナリー形式をGitで扱うためのさまざまなテクニックを紹介しました。特定のテキスト変換ツールや差分の取り方を使うようにGitを設定すれば、こうしたバイナリーファイルを管理しやすくなり、変更内容も見えやすくなります。これらの方法を使えば、Gitリポジトリでより幅広いファイル形式を効果的に追跡し、バージョン管理できます。

詳しい情報やさらなるカスタマイズの方法については、以下の資料とGitのドキュメントを参照してください。