開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

gitignoreの書き方と、追跡ファイルの管理方法。

最終更新:2017-07-10 by Joe

.gitignoreの書き方と仕様を、具体例を交えて再確認します。

gitignoreとは?

.gitignoreは、gitでレポジトリ内にある、追跡ファイルを管理するための設定ファイルです。

まず最初にクリアにする必要があるのは、.gitignoreに指定されたファイルは、指定された時点「追跡対象から除外される」のではなく「まだ追跡されていないファイルを、今後追跡しないようにする」という点です。すなわち、gitignoreに記載された上限により発生する最も大きな変化は「git add の実行時に、インデックスに追加されないようになる。」という点だと思います。

この認識のずれが混乱の元になっているケースも少なくないのでしょうか。

すでに追跡されているファイルはどうするの?

もしすでに追跡してしまっているファイルがあれば、下記のコマンドでトラッキング対象から外すことができます。

もし新しく追跡を除外したいファイルがあれば、このコマンドと.gitignoreによる設定を同時に行う必要があります。

// インデックスからのみファイルを削除する(追跡対象からはずす)
git rm --cached <FILE_NAME>

git rm は、通常、作業ツリーとインデックスの両方からファイルを削除します。「--cached」オプションをつけることで、作業ツリーをそのままで、インデックスからのみファイルを削除できるのです。

逆にもし作業ツリーからのみ削除するのであれば、git でない通常のシェルスクリプト「rm」を使うことになります。

.gitignoreの書き方の例

特定のファイル、ディレクトリを無視する

超基本形です。現状の.gitignoreが置かれたディレクトリ直下か、サブディレクトリも含めかどうかは、行頭の「/」の有り無しで使い分けることができます。すなわち、行頭に「/」があれば、そのディレクトリが基準となりますが、ディレクトリ名やファイル名から行頭がはじまれば、いかなるディレクイトリであっても、ファイルパスのマッチングが成立します。

/file-to-ignore.php

// 現在のディレクトリ直下のdir-to-ignoreディレクトリ
/dir_to_ignore

// any_dirディレクトリはサブディレクトリ配下かもしれない。
any_dir

特定のファイルだけトラックする

ワイルドカード「*」を利用します。同時に、否定を表す「!」を行頭に置くと、その行の反対を実行できます。

// file-to-track.phpだけを追跡する。
*
!file-to-track.php

特定のディレクトリだけをトラックする

*
!/dir-to-track/

特定の拡張子を無視する

jpgとpngを無視します。

*.jpg
*.png

特定の拡張子をトラックする

phpだけをトラックします。

!*.php

応用編:複雑な追跡設定

すこし複雑な.gitignoreを書く必要が生じることもあるかもしれません。

例えば、下記は、Wordpressで、コアファイルとプラグインなど無視し、テーマと設定ファイルだけをトラックしる例です。もう少しキレイに書けるかもしれませんが、理解しやすく書きます。

追跡するファイル:

  • /wp-content/themes/my-theme/*
  • /wp-config.php
*
!/wp-config.php
!/wp-content/
/wp-content/*
!/wp-content/themes/
/wp-content/themes/*
!/wp-content/themes/my-thenme/

実際は筆者は、config.php のトラッキングは諦めて行わない事が多いです。

そんな複雑な設定はかないですし、いろんなキーやパスワードが書かれているので、セキュリティ的にもあまり外部に保存したくないわけです。

あくまで .gitignore の一例ということで。

gitignoreの参考リンク

それでは、楽しいgitライフを。

閉じる