gitignore メカニズムが検索する設定ファイル
特定のファイルを Git のバージョン管理の対象から外すための仕組みとして、gitignore メカニズムが用意されています。 そのための設定ファイルは、下記のようなパスから検索され、最初に見つかったものが優先的に使用されます。
- ワークツリー中のディレクトリに置かれた
.gitignoreファイル - リポジトリの
.git/info/excludeファイル - 構成変数
core.exludesfileでパスを指定したファイル
ワークツリー内に置く .gitignore ファイルは、どの階層のディレクトリにも置くことができ、より下位のディレクトリにある .gitignore ファイルによる設定が優先されます。
プロジェクト全体で設定を共有したい場合は、.gitignore に設定を記述し、これをコミットしてチームメンバと共有します。
特定のリポジトリで、自分用に設定を行いたい場合は .git/info/exclude に設定を記述します。
どのリポジトリにも共通した、自分専用の設定を用いたい場合は、例えば $HOME/myconf/git-excludes といったファイルに設定を記述しておき、git config で以下のように参照設定しておけばよいでしょう。
$ git config --global core.excludesfile "$HOME"/myconf/git-excludes
上記の例では、グローバルな設定値にしていますが、--global オプションを外せば、特定のリポジトリ用に設定することも可能です。
.gitignore ファイルの構文
# コメント行
aaa # aaa というファイル、あるいはディレクトリを無視。
bbb/ # bbb というディレクトリを無視。
/ccc # .gitignore ファイルのあるディレクトリからの相対パスで
# ccc というファイル、あるいはディレクトリを無視。
# つまり、この場合は .gitignore ファイルと同じディレクトリ内にある
# ccc というファイル、あるいはディレクトリを示す。
*.class # 名前が .class で終わるファイルを無視
*.[ao] # 名前が .a あるいは .o で終わるファイルを無視
!ddd.o # ただし、ddd.o というファイルは無視「しない」
!/eee.a # .gitignore ファイルと同じディレクトリの eee.a というファイルは無視「しない」
設定例
デフォルトでは、以下のような一時ファイルまで git status コマンドなどで認識されてしまうので、これらのファイルを版管理の対象からはずしておくとよいです。
- ファイル名がチルダで終わるバックアップファイル
hello.txt~ - C/C++ プログラムビルドで作成される
*.aや*.oファイル - Java プログラムビルドで作成される
*.classファイル - Vim でファイル編集中に作成される
.hello.txt.swpのようなファイル - quilt の管理ディレクトリ
.pc
例えば、次のように設定します。
*~
*.[ao]
*.class
*.swp
.pc/プロジェクトによっては、コンパイル済みの *.a ファイルなどもコミットするかもしれないので、*.[ao] より *.o の方がよいかもしれません。
ignore 設定したファイルを git add する
gitignore によってバージョン管理の対象外にされているファイルを、強制的に git add するには、次のように -f オプションをつけて git add します。
$ git add -f vendor_library.so