.gitignoreで無視フォルダの中の特定のファイルを除外「!(否定文)」を使う場合の注意点
2019/02/24
.gitignoreの設定で除外「!(否定文)」を使う場合の注意点
.gitignoreの基本的な設定方法
Gitでファイルを管理する場合、管理対象にするファイルと管理対象にしないファイルの設定を「.gitignore」ファイルにします。
「.gitignore」ファイルの記述の方法の基本形は以下の通りとなっています。
「.gitignore」ファイルは、複数のフォルダに設置することが可能。
下層に行くほど優先される(記述内容が上書きされる)。
コメント
"#"
で始まる行はコメントとなります。
1 |
# "#"で始まる行はコメント |
ファイルを指定する
.gitignoreファイルにファイルを指定すると、そのファイルは git管理の対象外となります。
1 2 3 4 5 6 7 8 |
# すべてのフォルダ内の「test.php」を無視する test.php # すべてのフォルダ内でマッチする「test/test.php」を無視する test/test.php # 「.gitignore」がおいてある直下の「/test/test.php」を無視する /test/test.php |
フォルダを指定する
.gitignoreファイルにフォルダを指定すると、そのフォルダは Git管理の対象外となります。
1 2 3 4 5 6 7 8 |
# すべてのフォルダ内の「test_folder」を無視する test_folder/ # すべてのフォルダ内でマッチする「test_folder/test_folder/」を無視する test_folder/test_folder/ # 「.gitignore」がおいてある直下の「test_folder/test_folder/」を無視する test_folder/test_folder/ |
管理対象外としてフォルダを指定すると、フォルダ内にあるフォルダも管理対象外となるため、そのフォルダ内のパスを指定してもそもそも管理対象外であるため正常に反映されません。
今回の記事のポイントは、このフォルダの指定の仕方になります。
正規表現を使って指定する
.gitignoreファイルに指定するファイルやフォルダは、正規表現を使用して複数のファイル、フォルダを指定することもできます。
1 2 3 4 5 |
# 「.gitignore」がおいてある直下の「/test/」フォルダ内のすべてのファイル、フォルダを無視する /test/* # 「.gitignore」がおいてある直下の「/test/」フォルダ内の拡張子が「css」のファイルを無視する /test/*.css |
「!」を使って無視対象の否定設定をする
無視対象のフォルダの中の特定のファイルを無視対象から外す場合は「!(否定文)」を使います。
1 2 |
/test/* !/test/test1.php |
上記は、「test」フォルダは無視対象にしますが、その中の「test1.php」は無視対象から外す(監視対象にする)という設定になります。
.gitignoreの具体的な設定方法・対象外のフォルダ内のフォルダの指定方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
vendor ├─test1 │ test11.php │ test12.php │ ├─test2 │ ├─test21 │ │ ├─test211 │ │ │ test2111.php │ │ │ test2112.php │ │ │ │ │ └─test212 │ │ test2121.php │ │ test2122.php │ │ │ └─test22 │ ├─test221 │ │ test2211.php │ │ test2212.php │ │ │ └─test222 │ test2221.php │ test2222.php │ └─test3 └─test31 ├─test311 │ test3111.php │ test3112.php │ └─test312 test3121.php test3122.php |
無視対象のフォルダの中のファイルを「!」を使って指定する
上記のような構成の中で、
/vendor/test1/test11.php
上記のファイルを無視対象(除外対象)から外したい場合は、下記のような記述になります。
1 2 3 4 |
/vendor/* !/vendor/test1/ /vendor/test1/* !/vendor/test1/test11.php |
下記の記述方法では正常に動作しません。
1 2 |
/vendor/* !/vendor/test1/test11.php |
先の基本的な「.gitignoreの基本的な設定方法」の「フォルダを指定する」で少し触れましたが、最初に「/vendor/*
」を記述していますので、「vendor」フォルダ内のすべてのファイル、フォルダが管理対象外(無視対象)となっています。
そのため、続けて「/vendor/test1/test11.php
」を指定しても「/vendor/test1/
」も無視の対象となっているため、無視の対象から除外することができません。
そのため、「!/vendor/test1/
」を追加することで、無視対象の「vendor」フォルダの中の「test1」だけは無視対象から除外(否定)する設定を行います。
さらに「/vendor/test1/*
」を追加して、改めて「/vendor/test1/
」フォルダ内のファイル、フォルダを無視対象にする設定を行います。
同様に
/vendor/test2/test21/test211/test2111.php
上記のファイルを無視対象(除外対象)から外したい場合は、下記のような記述になります。
1 2 3 4 5 6 7 8 |
/vendor/* !/vendor/test2/ vendor/test2/* !/vendor/test2/test21/ vendor/test2/test21/* !/vendor/test2/test21/test211/ vendor/test2/test21/test211/* !/vendor/test2/test21/test211/test2111.php |
無視対象にしたフォルダの中の特定のファイル、フォルダを無視対象から外す(無視設定を否定)する場合は、その途中のパスも無視対象から外す(無視設定を否定)する設定をしていく必要が出てきます。
無視対象から外す設定は、階層が深くなるとそれだけ記述が長くなり面倒になります。
無視対象のフォルダの中のフォルダが 1つしかない場合の対応方法
さらに厄介なのが、「test31」のように、経由するフォルダの中にフォルダが 1つしかない場合です。
下記のように記述してもうまく動作しません。
1 2 3 4 5 6 7 8 |
/vendor/* !/vendor/test3/ vendor/test3/* !/vendor/test3/test31/ vendor/test3/test31/* !/vendor/test3/test31/test311/ vendor/test3/test31/test311/* !/vendor/test3/test31/test311/test3111.php |
下記は分かりやすいように 3行目、4行目をコメントにしていますが、下記のように「test31」の指定部分を削除する必要があります。
1 2 3 4 5 6 7 8 |
/vendor/* !/vendor/test3/ #vendor/test3/* #!/vendor/test3/test31/ vendor/test3/test31/* !/vendor/test3/test31/test311/ vendor/test3/test31/test311/* !/vendor/test3/test31/test311/test3111.php |
.gitignoreの設定方法のあと
.gitignoreを設定すると、その内容を反映し、無視対象から外したファイル(gitの管理対象に加えたファイル)を、改めて「git add .」で追加して、コミットする必要があります。
ですが、Gitはコミットした情報をキャッシュとして管理していますので、.gitignoreを更新しただけではうまく管理対象に加えたファイルを処理してくれない場合があります。
そんな場合は、Gitのキャッシュを削除する対応が必要になりますが、それについては下記に記事を書いていますので、併せて参考にしてください。
.gitignoreを更新しても反映されないときは「git rm -r --cached .」でキャッシュを削除
Git関連の記事
Gitはフォルダ自体を管理対象にはできない。空のフォルダを設定する手順.gitignoreを更新しても反映されないときは「git rm -r --cached .」でキャッシュを削除
.gitignoreで無視フォルダの中の特定のファイルを除外「!(否定文)」を使う場合の注意点
Gitで「fatal: Authentication failed for 'https://example.com/git_repositories/example.git/'」のエラーが出た場合の対処方法の一つ
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
その他の「git」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
Gitで「fatal: Authentication failed for ‘https://example.com/git_repositories/example.git/’」のエラーが出た場合の対処方法の一つ
Gitのリモートリポジトリにアクセスする際、Authentication failedのエラーが。しかし、ID、PASSが間違っているのではなく、リモートリポジトリのURLが間違っている場合もあるので再度確認を。
-
-
Git管理のソースを元に新しく構築する環境に反映させる手順
Gitで管理しているソースを使って環境を構築する方法を解説。CakePHPを使う想定で、環境を構築したのちpullして、重複ファイルを削除して、改めてpullすれば出来上がる。
-
-
PythonでURLの有無、存在をチェックするスクリプト
PythonでURLが存在するか否かのチェックスクリプト。ライブラリ「urllib2」を使い、指定のURLにアクセスしそのレスポンスコードを判別するという仕組み。
-
-
日本語は2バイト文字?3バイト文字?
日本語は2バイトという理解でしたが、UTF-8では事情が違います。その説明です。
-
-
chromedriver.exe – ディスクがありませんと出てSeleniumの設定が上手くいかない
Selenium WebDriverを使ってChromeを自動操作する仕組みを作る際、chromedriver.exeを利用しますが、ディスクがありません、というエラーが発生する場合があります。その対処方法を解説します。
-
-
FTPでダウンロード時にファイルが重複するため上書きしますか?と表示される問題
FTPでファイルをダウンロードする際に「ファイルが重複しています。上書きしますか?」というメッセージが出る場合がありますが、これの原因と対策、解決策の記事です。
-
-
X Serverへの引越しの注意点まとめ。ロリポップとの違いと対処方法 6事例
ロリポップからX Serverに引越し。ロリポップとX Serverの違いに注目することでX Serverの設定方法を明確にします。またX Serverならではの設定ポイントなども解説。
-
-
コピーコンテンツ対策.htaccessで直リンク禁止しリダイレクトで対応
不正なコピーコンテンツからの直リンクを拒否する.htaccessの設定方法。拒否するサイトを指定、許可するサイトを指定する方法、単純な拒否と画像の差し替えを解説。
-
-
直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明
直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。
-
-
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。