できない.dev

.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 とは役割が違う。

この記事は役立ちましたか?