Git のソースコード管理の除外指定する .gitignore。ときどき気になるのが Thumbs.db や .DS_Store などの指定がプロダクトの .gitignore ファイルに含まれているケース。開発者固有の設定、どこにしたらよいでしょう?
開発者固有のファイルはプロダクトのソースコード管理からは除外したいです。とはいえ OS が自動で作ったThumbs.db
や.DS_Store
などは、いつの間にかソースコード管理に紛れ込んでしまうことも。それを避けるために .gitignore があるのですが、Thumbs.db
などの除外指定がプロダクトの.gitignore
ファイルに書かれているといつもモヤっとします。
プロダクトとしてThumbs.db
や.DS_Store
が生成物であり、かつ管理不要だとしたらわかります。しかし、多くのケースはプロダクトの生成物ではありません。開発者固有といえるでしょう。このようなファイルの除外指定はどうするのが良いのか調べたのでまとめます。
gitignore.io での扱い
以前、本ブログで紹介した「.gitignore は、生成サービス gitignore.io を使って作ろう!」のgitignore.ioは、さまざまな環境の .gitignore に対応しています。
たとえばWindows の定義では[Dd]esktop.ini
などが設定されています。もちろんmacOS 版もありますし、Linux 版もあります。また Java のビルドツールMavenや、IDE のVisual Studioなどといったツールに関するものもあります。
ただし、これらをどのように使うのかにつて言及したドキュメントはありませんでした。
GitHub の gitignore リポジトリ
gitignore.io 発祥の元となる GitHub のgithub/gitignoreリポジトリを見てみます。このリポジトリは GitHub で新しいリポジトリを作成する際の [Add .gitignore] で使われるテンプレートです。
このリポジトリで気になるのがGlobal
ディレクトリです。OS や IDE/エディター の設定が、このGlobal
ディレクトリにあります。
そして、以下のドキュメントへのリンクがあります。色々説明がありますが OS 固有のファイルなどは global .gitignore を作り、そちらに設定するようにとのことです。
つまり、このGlobal
ディレクトリにあるような定義はプロダクトの.gitignore
ではなく、グローバル側(ユーザーのホームディレクトリ以下) に設定するとしています。
Git のドキュメント
GitHub で答えが出たように思いますが、最後に Git 公式では、どのように考えられているのか確認します。
.gitignore に関するドキュメント「Git - gitignore Documentation」があります。
まず.gitignore
自体について以下のように書かれています。
“Patterns which should be version-controlled and distributed to other repositories via clone (i.e., files that all developers will want to ignore) should go into a .gitignore file. -gitignore Documentation“
そして、もうひとつ。
“Patterns which a user wants Git to ignore in all situations (e.g., backup or temporary files generated by the user’s editor of choice) generally go into a file specified by core.excludesFile in the user’s ~/.gitconfig. -gitignore Documentation“
ざっくり意訳すると「すべての開発者が無視したいファイルをバージョン管理して、クローン先の他リポジトリへ配布するパターンとして.gitignore
ファイルを使うべき」で「ユーザーのエディターが生成したバックアップや一時ファイルは、~/.gitconfig
のcore.excludesFile
で指定したファイルに入れる」といった感じでしょうか。
全開発者で共有する内容に.gitignore
を使うべき(should be)で、ユーザー固有の設定はcore.excludesFile
で指定したファイルにするのが一般的(generally)であると。
ここでも OS 固有の設定は.gitignore
ではなく、グローバル側(ユーザーのホームディレクトリ以下) に作るとしています。
まとめ
Git 公式ドキュメントや、GitHub の説明から考えるとThumbs.db
や.DS_Store
などの OS 固有の設定は、~/.gitconfig
のcore.excludesFile
指定ファイルがよいといえるでしょう。
ただし使っている単語がshould be / generally
であり、must
ではないので絶対ダメまではいかずとも、固有設定を.gitignore
に入れるのだとしたら、よく考えてからやりましょう、といったところでしょうか。(RFC ではないし、全大文字でもないですがRFC 2119 - IPAに倣って)
※core.excludesFile
のデフォルトは、以下の順で見つけたファイルを使います。そのためcore.excludesFile
は明示的に設定せず、下記2番目の~/.config/git/ignore
ファイルを作って使うのが簡単です。
$XDG_CONFIG_HOME/git/ignore
$HOME/.config/git/ignore
(=~/.config/git/ignore
)
これで、モヤっとしていたのがスッキリしました。
OS 固有の設定は~/.config/git/ignore
にしていきたいと思います。
では IDE/エディターの設定は?
“すべての開発者が無視したいファイル” か?、と考えると、やはり固有の設定といえるので~/.config/git/ignore
ですね。OSS ではなく、クローズドなプロジェクトの場合は.gitignore
でよいかもしれませんが、いつ「すべての開発者」が変わるかもしれないと考えると~/.config/git/ignore
がよいと思います。