6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

.gitattributesで特定ディレクトリ内のファイルを指定する

Last updated at Posted at 2022-11-29

概要

ファイルごと、ディレクトリごとにgitの振る舞いを制御する方法に.gitattributesを使用する方法があります。
このファイルの使い方はネット上に記事がそれなりに存在しますが、特定ディレクトリ内のファイルを指定する方法について公式ドキュメント含め情報が少ないです。
ということで、ディレクトリ内のファイルを指定する方法について調べたことをメモしておこうと思います。

結論

.gitignoreの書き方と変わらない

.gitattributesの使い方

一般にリポジトリのルートディレクトリに配置してgitの振る舞いを制御します。
配置するファイルの記載例は以下です。

.gitattributes
*           text=auto eol=lf
*.c         text eol=lf
*.h         text eol=lf
*.bat       text eol=crlf
*.sh        text eol=lf
*.jpg       binary

ファイルをテキストとして扱ったり、改行コードを指定したり、差分表示するときのエンコードを指定したり、、、などいろいろ設定できます。

特定ディレクトリ内のファイルを指定する

早速本題です。
ディレクトリ単位で指定の方法はいろいろあります。

.gitattributes
# リポジトリルート直下の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の情報も調べてみるといいかもしれません。

以上になります。
ここまで読んでいただきありがとうございました。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?