.gitattributes
別名: gitattributes / git attributes / Git 属性ファイル
パスのパターンごとに Git の属性を割り当てるファイル。
改行コードの正規化(text / eol)やバイナリ扱い、差分・マージの方法をリポジトリ単位で固定できる。
公開:
定義
.gitattributes は、パスのパターンごとに Git の「属性」を割り当てるファイル。
1 行に「パターン 属性 属性 …」の形で書き、改行コードの変換、バイナリとしての扱い、差分やマージの方法をファイル単位で決める。
リポジトリにコミットすれば、全員の環境で同じ指定が効く。
詳細
属性は text(設定)、-text(解除)、eol=lf(値の指定)のように書く。text が付いたファイルは index に入るときに改行が LF に正規化され、text=auto なら Git がテキストかバイナリかを判定する。eol=crlf / eol=lf はチェックアウト時の作業ツリーの改行を固定し、text が未指定なら text も付く。binary は -diff -merge -text をまとめたマクロ。
複数の行がマッチしたときは、後の行が属性ごとに上書きする(公式ドキュメント(新しいタブで開く))。
* text=auto
*.sh text eol=lf
*.bat text eol=crlf
*.png binaryよくある誤解
- 追加すれば既存ファイルの改行も直る: コミット済みのファイルはそのまま。
git add --renormalize .で再正規化してコミットする。 - .gitignore と同じ書き方ができる: パターンはほぼ同じだが、否定パターンは使えず、
dir/のようなディレクトリ指定は中のファイルにマッチしない。dir/**と書く。 - text=auto で作業ツリーも LF になる:
text=autoが決めるのは index 側の正規化。
作業ツリーの改行はeol属性、未指定ならcore.autocrlf/core.eolで決まる。
関連
改行コードそのものは CRLF、警告の消し方は LF will be replaced by CRLF の警告が消せない、シェルスクリプトが動かない例は bad interpreter が解決できない を参照。
除外ファイルの .gitignore とは役割が違う。