技術と日常。

日々の気が付いたこと・気になったことを残しておきます。

[Git].gitignoreで無視したディレクトリの中のサブディレクトリを追跡する

.gitignoreで無視したディレクトリの中のサブディレクトリを追跡する

以下のようなファイル構造の時に、directoryを無視しつつ、subdirectoryだけを追跡したいと考えます。

│  .gitignore
│
└─directory
    │  not-important.txt
    │
    └─subdirectory
            important.txt

.gitignoreに以下のように書くと、うまくいきません。
これは、 ディレクトリを無視する構文(/directory/)を使用すると、それ以下のファイルは常に無視をされる ためです

/directory/
!/directory/subdirectory

そのため、 ディレクトリの無視ではなく、ファイルのワイルドカードでの無視 を使用します。
ファイル単位で無視 -> ディレクトリを追跡 という手順を踏むと、うまくいきます。

# ファイル単位で無視
/directory/*

# ディレクトリを追跡
!/directory/subdirectory/

git add ., git statusを叩くと、追加されていることが確認できます

>git add .
>git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   .gitignore
        new file:   directory/subdirectory/important.txt

さらに前の行にて無視されているとき

さらに前の行にて/directoryが無視されているときは、ファイル単位で無視 -> ディレクトリを追跡 を繰り返し行います

# ファイル単位で無視
/*

# ディレクトリを追跡
!/directory/

# ファイル単位で無視
/directory/*

# ディレクトリを追跡
!/directory/subdirectory/

参考

git - .gitignore exclude folder but include specific subfolder - Stack Overflow