.gitignore ファイルで Git にバージョン管理させないファイルを指定する

gitignore メカニズムが検索する設定ファイル

特定のファイルを Git のバージョン管理の対象から外すための仕組みとして、gitignore メカニズムが用意されています。 そのための設定ファイルは、下記のようなパスから検索され、最初に見つかったものが優先的に使用されます。

  1. ワークツリー中のディレクトリに置かれた .gitignore ファイル
  2. リポジトリの .git/info/exclude ファイル
  3. 構成変数 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

例えば、次のように設定します。

.gitignore
*~
*.[ao]
*.class
*.swp
.pc/

プロジェクトによっては、コンパイル済みの *.a ファイルなどもコミットするかもしれないので、*.[ao] より *.o の方がよいかもしれません。

ignore 設定したファイルを git add する

gitignore によってバージョン管理の対象外にされているファイルを、強制的に git add するには、次のように -f オプションをつけて git add します。

無視されたファイルを強制追加
$ git add -f vendor_library.so