設定項目の中には、パスに対して指定できるものもあります。これらの設定を、指定したパスのサブディレクトリやファイルにのみ適用します。フィルタリングさせたりできます。プロジェクトでパスに対して設定できる属性のいくつかについて学び、実際にその機能を使う例を見ていきます。対してバイナリファイルの扱い方を指示するというものがあります。取得できるものもあります。指示する方法を紹介します。バイナリファイルの特定テキストファイルのように見えるファイルであっても、何らかの目的のために意図的にバイナリデータとして扱いたいことがあります。終わる名前のファイルがあります。ビルドの設定などをディスクに書き出したものです。文字なので、理論上はテキストファイルであると言えます。このファイルをテキストファイルとして扱いたくはありません。実際のところ、このファイルは軽量なデータベースとして使われているからです。とってもあまり意味がありません。このファイルは、基本的に機械が処理するものなのです。要するに、バイナリファイルと同じように扱いたいということです。ファイルに追加します。調べることはなくなります。属性を使うことができます。比較できるよう、バイナリデータをテキストデータに変換する方法をGitに教えればいいのです。このテクニックを使ってまず解決したいことといえば、人類にとって最も厄介な問題のひとつ、Wordで作成した文書のバージョン管理ではないでしょうか。奇妙なことに、Wordは最悪のエディタだと全ての人が知っているにも係わらず、皆がWordを使っています。Word文書をバージョン管理したいと思ったなら、Gitのリポジトリにそれらを追加して、まとめてコミットすればいいのです。いつも通りに実行すると、次のように表示されるだけです。Gitの属性を使えば、これをうまく解決できます。`.gitattributes`に次の行を追加して下さい。これは自分で用意しなければなりません。取れるように設定してみましょう。インストールする必要があります。ファイルの指示に従って、シェルから見える場所にファイルを置いてください。合わせて変換するラッパースクリプトを作成します。`docx2txt`という名前のファイルを次の内容で作成してください。するのを忘れないでください。このファイルを使うように設定します。することで、Wordファイルの差分を取る際に、より効果的なテキストベースでの差分を取ることができるようになります。この本の第1章をWord形式に変換し、Gitリポジトリに登録しました。新しい段落を追加しました。出力は次のようになります。いう正しい文字列を首尾よく、かつ、簡潔に知らせてくれました。これだけでは完璧ではありません(書式の変更はここでは表示されていません)が、確実に動作しています。その他の興味深い問題としては、画像ファイルの差分があります。ひとつの方法として、EXIF情報(多くのファイル形式で使用されているメタデータ)を抽出するフィルタを使う方法があります。exiftool`をダウンロードしてインストールすれば、画像データを、メタデータを表すテキストデータへ変換できます。少なくとも、変更内容をテキスト形式で表示できるようになります。ここで、以下の行を.gitattributes`に追加してみましょう。diff=exif続いて、さきほどインストールしたツールを使うようGitの設定を変更します。実行すると、次のように表示されるでしょう。Alphaファイルのサイズと画像のサイズが変更されたことが簡単に見て取れます。キーワード展開SubversionやCVSを使っていた開発者から、キーワード展開機能をリクエストされることがよくあります。コミットの後に、コミットに関する情報を使ってファイルを変更することはできないということです。コミットの最初にファイルのチェックサムを生成するためです。ファイルをチェックアウトする際にテキストを挿入し、コミットへ追加する際にそれを削除することは可能です。Gitの属性はこれを行うための方法を2つ提供します。チェックサムを自動的に挿入できます。あるファイル、もしくはいくつかのファイルに対してこの属性を設定すれば、次にそのブランチをチェックアウトする時、Gitはこの置き換えを行うようになります。挿入されるチェックサムはコミットに対するものではなく、対象となるblobのものであるという点に注意して下さい。ここで、以下の行を`.gitattributes`に追加してみましょう。ident続いて、`$Id$`への参照をテスト用ファイルに追加します。test.txtそうすると、次にこのファイルをチェックアウトする時、GitはblobのSHA-1チェックサムを挿入します。$しかし、この結果はあまり役に立ちません。CVSやSubversionのキーワード展開ではタイムスタンプを含めることができます。対して、SHA-1チェックサムは完全にランダムな値ですから、2つの値の新旧を知るための助けにはなりません。これには、コミットおよびチェックアウトの時にキーワード展開を行うフィルタを書いてやれば対応できます。フィルタと呼ばれます。参照)に処理を行うスクリプトを設定できます。これらのフィルタは、色々と面白いことに使えます。フィルタを実行するこの機能に対してオリジナルのコミットメッセージは簡単な例を与えてくれています。プログラムに通すというものです。ファイルに対してこのフィルタを実行するように、`.gitattributes`ファイルにfilter属性を設定できます。フィルタが何を行えばいいのかをGitに教えます。cat`は基本的に何もしません。入力されたデータと同じデータを吐き出すだけです。キーワード展開があります。これを正しく行うには、ファイル名を受け取り、プロジェクトの最新のコミットの日付を見て、その日付をファイルに挿入するちょっとしたスクリプトが必要になります。これを行うRubyスクリプトを以下に示します。文字列にその日付を追加し、結果を出力します。お気に入りのどんな言語で書くにしても、簡単なスクリプトになるでしょう。このスクリプトファイルに`expand_date`と名前をつけ、実行パスのどこかに置きます。フィルタを使うように指定します。文字列の内側にある内容を削除し、日付を挿入する前の状態に戻します。フィルタの準備ができました。キーワードを追加した上で、テストしてみましょう。date_test.txtこれらの変更をコミットして、再度ファイルをチェックアウトすれば、キーワードが正しく置き換えられているのがわかります。-0700$アプリケーションのカスタマイズにあたり、このテクニックがどれほど強力か、おわかりいただけたと思います。ファイルはコミットされてプロジェクト内で共有されますが、ドライバ(このケースで言えば、dater)そうはそうはいきません。そのため、この機能はどこででも働くわけではありません。フィルタを設計する時には、たとえフィルタが正常に動作しなかったとしても、プロジェクトは適切に動き続けられるようにすべきです。リポジトリをエクスポートするあなたのプロジェクトのアーカイブをエクスポートする時には、Gitの属性データを使って興味深いことができます。export-ignoreアーカイブを生成するとき、特定のファイルやディレクトリをエクスポートしないように設定できます。属性を設定することで、分別が行えます。`test/`ディレクトリ以下に入っているとしましょう。その場合、次の1行をGitの属性ファイルに追加します。ディレクトリが含まれないようになります。ログ書式指定機能とキーワード展開機能で生成した内容をファイルに付与できます。次のように設定します。以下のような内容になっているはずです。用いることもできます。コマンドのワードラップ処理が適用されます。output.この結果作成されたアーカイブはデプロイするのにぴったりです。エクスポートされてしまったアーカイブで開発を続けるのはおすすめできません。マージの戦略Gitの属性を使えば、プロジェクト中の特定のファイルに対して、異なるマージ戦略を使うこともできます。非常に有用なオプションのひとつに、指定したファイルで競合が発生した場合に、マージを行わずに、あなたの変更内容で他の誰かの変更を上書きするように設定するというものがあります。これはプロジェクトにおいて、分岐したブランチや、特別版のブランチで作業をしている時、そのブランチでの変更をマージさせたいが、特定のファイルの変更はなかったことにしたいというような時に助けになります。いうデータベースの設定ファイルがあり、ふたつのブランチでその内容が異なっているとしましょう。そのデータベースファイルを台無しにすることなしに、一方のブランチへとマージしたいとします。これは、次のように属性を設定すれば実現できます。次のように定義します。関する競合は発生せず、次のような結果になります。元々のバージョンのまま、書き変わりません。Conservancy。