最初に結論
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の最初は*ではなく/*とする必要がある.