💾
gitignore ホワイトリスト方式(管理対象の明示的指定)
gitignore ホワイトリスト方式(管理対象の明示的指定)
例示
# .gitignore
# Ignore All
*
!*/
# Allowlist
!.git/*
!.gitignore
!.gitattributes
!*.c
!*.cpp
!*.h
!*.js
!*.py
!*.sh
!*.json
!*.md
!*.txt
!*.tsv
!*.csv
!*.svg
!*.pdf
原理
まず, gitignoreは次の記述ができる[1]. (標準globパターンとは *
:ワイルドカード, ?
:任意一文字, [a-z]
:文字セット.)
.gitignore ファイルに記述するパターンの規則は、次のようになります.
- 空行あるいは # で始まる行は無視される
- 標準の glob パターンを使用可能
- 再帰を避けるためには、パターンの最初にスラッシュ (/) をつける
- ディレクトリを指定するには、パターンの最後にスラッシュ (/) をつける
- パターンを逆転させるには、最初に感嘆符 (!) をつける
例示で要となるのは次の5行である
-
*
全てを管理対象から外す -
!*/
全てのディレクトリを管理対象にする(戻す)
- もし, やはり含めたくないディレクトリがあるならこの下に
build/
といった形で追加.
-
!.git/*
.gitディレクトリ配下の全てのファイルを管理対象にする(戻す) -
!.gitignore
.gitignoreファイルを管理対象にする -
!.gitattributes
.gitattributesを管理対象にする
残りは実際に管理対象にしたいファイルを続けて記述していく. 拡張子なら!*.ext
だし, 拡張子を持たないなら!Doxyfile
とかになる.
補足
既に追跡(登録)されてしまっているファイルの履歴管理対象からの削除は次のコマンドで行う. 実体のファイルは残る.
$ git rm -r --cached <file>
.gitignoreのテンプレートはGitHubのgitignoreテンプレートや, .gitignore.ioがあり, ほとんどの言語が揃っている. しかし, これらは(まぁ素直な)管理対象から外すという形での記述が大部分である. 個人で慎ましくファイルの管理をやるなら, 何を管理対象とするか, を指定したほうがすっきり書けることもある.
参考
- &1: Scott Chacon, Ben Straub "Pro Git SECOND EDITION" 日本語版, Appress, 2020-02-29 PDF 年月日は推定
- gitignoreテンプレート
- .gitignore.io
- Bitbuket tutorials .gitignore
- .gitignoreの仕様を理解する
- gitignoreの書き方チートシート【テンプレあり】
Discussion
許可方式だろうが, 禁止方式だろうが, 適用範囲が巨大になればなるほど複雑になる. そんなときはいっそリポジトリごと分割するのも手だろうか.