最初に結論
WindowsにおいてGitで特定のディレクトリのみ管理したい場合,.gitignore
の最初は*
ではなく/*
とする必要がある.*
だと,たとえ.gitignore
内でディレクトリを!
指定しても管理対象にならない.
起こった問題
問題が起こった環境は,
- OS: Windows 10
- Git: v2.19.2.windows.1
である.
ルートに.vscode
ディレクトリとscripts
ディレクトリとその他もろもろのディレクトリがあるGitリポジトリを作成した..vscode
ディレクトリとscripts
ディレクトリのみをGitで管理したかったので,以下のような.gitignore
を作成した.
# いったん全てのファイルを無視
*
!.gitignore
!/.vscode/
!/scripts/
そして以下のコマンドで一度キャッシュをリセットした.
git rm -r --cached .
すると.gitignore
以外の全てのディレクトリが追跡できなくなり,.vscode
ディレクトリとscripts
ディレクトリもgit add
できなくなった.
解決方法
.gitignore
の最初の*
を/*
に変更したら問題が解決した..gitignore
を以下のように変更すると,.vscode
ディレクトリとscripts
ディレクトリがgit add
でき,追跡できるようになった.
# いったん全てのファイルを無視
/*
!.gitignore
!/.vscode/
!/scripts/
Linuxではどうなるのか
Linuxではどうなるのか検証してみた.OSはUbuntu 18.04,Gitのバージョンは2.17.1である.
結論から言うとLinuxではこのような問題は起こらなかった.
.gitignore
において*
で全ファイルを無視してキャッシュを削除した後,追跡したいディレクトリを!/script/
のように指定してあげると問題なくgit add
できた.またLinuxで.gitignore
の最初を/*
としていても,特に問題は出なかった.WindowsとLinuxの両方で運用する予定のあるリポジトリは/*
としておくべきである.
結論
WindowsにおいてGitで特定のディレクトリのみ管理したい場合,.gitignore
の最初は*
ではなく/*
とする必要がある.