概要
ファイルごと、ディレクトリごとにgitの振る舞いを制御する方法に.gitattributes
を使用する方法があります。
このファイルの使い方はネット上に記事がそれなりに存在しますが、特定ディレクトリ内のファイルを指定する方法について公式ドキュメント含め情報が少ないです。
ということで、ディレクトリ内のファイルを指定する方法について調べたことをメモしておこうと思います。
結論
.gitignore
の書き方と変わらない
.gitattributesの使い方
一般にリポジトリのルートディレクトリに配置してgitの振る舞いを制御します。
配置するファイルの記載例は以下です。
* text=auto eol=lf
*.c text eol=lf
*.h text eol=lf
*.bat text eol=crlf
*.sh text eol=lf
*.jpg binary
ファイルをテキストとして扱ったり、改行コードを指定したり、差分表示するときのエンコードを指定したり、、、などいろいろ設定できます。
特定ディレクトリ内のファイルを指定する
早速本題です。
ディレクトリ単位で指定の方法はいろいろあります。
# リポジトリルート直下のsrcフォルダ直下のファイルに適用
src/* eol=crlf
# リポジトリルート直下のsrc/hogeフォルダ直下のファイルに適用
src/hoge/* eol=crlf
# リポジトリルートから一階層下のmoduleフォルダ直下のファイルに適用
# リポジトリルートのmoduleフォルダは対象外
*/module/* eol=crlf
# リポジトリ内のどこかにあるすべてのsampleフォルダ直下のすべてのファイルに適用
**/sample/* eol=crlf
# リポジトリルート直下のtestフォルダ内、サブフォルダ内、すべてのファイルに適用
test/** eol=crlf
# ディレクトリ問わず、すべてのtestフォルダ直下のcsvファイルに適用
**/test/*.csv eol=crlf
# リポジトリルート直下のtestフォルダ内、サブディレクトリ内、すべてのcsvファイルに適用
test/**/*.csv eol=crlf
# リポジトリ内のどこかにあるすべてのtestフォルダ内、サブディレクトリ内、すべてのcsvファイルに適用
**/test/**/*.csv eol=crlf
結構多彩な指定が可能そうです。
まとめ
拡張子で一律に指定すると場合によっては都合が悪いことがあります。
拡張子が一緒でも、異なるOSで使うファイルだったり、異なるソフトで使用するファイルだったり、といったパターンです。
.gitignore
と指定方法は一緒なので、公式ドキュメントであまり解説しないのはこのためかも。
困ったときは.gitignore
の情報も調べてみるといいかもしれません。
以上になります。
ここまで読んでいただきありがとうございました。