GITで管理したくないファイルを指定する。
ルートフォルダの直下に .gitignore という名前で
ファイルを作り、以下のように記述する。
# #文字は行末までコメント # 空行や末尾の空白文字も無視される。 # ルート(GITの管理フォルダ)の直下のconfig.ini を無視する。 /config.ini # /が含まれていないときは、ルート直下でもサブフォルダでも、 # どこにあっても、ファイル名に基づいて判定する。 foo.txt # 例えばこの場合、どのディレクトリでも、foo.txt という名前のファイルを無視する。 # *は任意の文字列になる。拡張子htmlのファイルをすべて無視する例。 *.html # この場合、/が含まれていないので、ルート直下でもサブフォルダでも、 # どこにあっても拡張子htmlのファイルがすべて無視される。 # !文字は否定になる。上記設定により*.htmlは無視するけど、index.html は無視しない例。 !index.html # ディレクトリを無視する場合。 src/
# ファイル名に#文字や!文字などが含まれているときは \(バックスラッシュないし円記号)でエスケープする。 \#contents\# # []内に文字を並べると、どれかの文字とマッチする。 *.[ch] # *.c 又は *.h にマッチする。[0-9]のように文字の範囲指定もできる。 # 複数のパターンにマッチするときは、最後にマッチしたものが優先される。 src/ !/src/hello.c # src/ で無視する設定になっているが、後から指定した /src/hello.c が優先する。 # *文字は任意のファイル名にマッチするが/にはマッチしない。 /include/*.h # 上の例は /include/time.h にマッチするが、 /include/sys/time.h にはマッチしない。 # *文字はディレクトリ名にもマッチする。 /include/*/*.h # 上の例は /include/sys/time.h にマッチする。 # **は特別な意味がある。複数段のディレクトリ階層にマッチする。 /include/**/*.h # 上の例は /include/time.h, /include/sys/time.h, /include/local/sys/time.h のすべてにマッチする。 # **はファイルもマッチする。 /include/** # 上の例は /include 配下のすべてのファイル/ディレクトリにマッチする。(この場合は /include/と同じ)
.gitignore ファイルは、通常は無視するファイルを指定する。
逆に、無視しないファイルをすべて指定して、
何も書かなければ無視するようにもできる。
これがホワイトリスト方式。
/* !/index.html !/src/最初の /* により、いったんすべて無視するように指定している。
その後、(GIT管理フォルダ)/index.html と (GIT管理フォルダ)/src ディレクトリ以下は管理対象としている。
その他は無視する設定になる。
/* !/index.html !/src/hello.cこの例では、/* により先ずいったん、すべてを無視するよう指定して、
ただし /index.html は無視しないとしている。
これはいいが、ところが次の /src/hello.c を無視しない
(つまりGITの管理対象とする)という指定は効果をもたず、
GITの管理対象とならない。
これはGITの仕様で、/*の指定によって /src ディレクトリの検索が
行われないため。(マニュアルには「性能上の理由により」とはっきり書かれている)
/src/hello.c を管理対象とするには、
/* !/src/ !/src/hello.cただしこれだと、/src/foo.c というファイルがあればこれも管理対象となる。
つまり、こんどは最後の !/src/hello.c が意味をなさなくなる。
/src/ 配下は基本的にすべて無視するが、/src/hello.c だけは無視しないためには、
以下のように書く。
/* !/src/ /src/* !/src/hello.cこれが正解。
ルートフォルダ直下に .gitignore ファイルを置くと最初に書いたが、
サブフォルダ内に置くこともできる。
この場合、.gitignore 内で指定したパスは .gitignore ファイルからの相対パスになる。
私はあまり使わないが、大きなシステムでサブシステム単位で
管理したいときには有用かもしれない。
コメントをかく