git で無視したいディレクトリの中に .gitignore で * するのダメ

例えばプロジェクト直下の ore-no-special/ ディレクトリを無視したい場合、リポジトリルートの .gitignore で下記のように記述すれば無視できますが、

/ore-no-special/

次のような .gitignoreore-no-special/ の中に入れておくだけでも無視できます。

*

つまり次のような構成です。

/path/to/project/
    ore-no-special/
        .gitignore # *

自分にだけ必要で他の誰にも必要の無いディレクトリの無視設定をリポジトリに含まれる .gitignore に書くのははばかられますが、この方法ならリポジトリに含まれるファイルは汚れません。

.git/info/exclude でも似たようなことはできますが、ディレクトリまるごと無視するのならそのディレクトリの中に .gitignore を作るほうが * だけで手早いので(echo \* > ore-no-special/.gitignore)多用していました。

.

.

.

と思っていたんですが、この方法で無視したディレクトリは git clean -d -f で消し飛びます。

-x を指定しなければ無視されたディレクトリは消えないと思っていたんですが、そもそもこの方法はディレクトリの中身を無視しているのであってディレクトリは無視できていないので git clean -d に対して無視されません。

ので、ore-no-special/ みたいなディレクトリを無視するときはやっぱり普通に .git/info/exclude に下記のようにするのが正解でした。

/ore-no-special/

なお、プロジェクトルートの .gitignore でも /ore-no-special/* と書いてしまうと git clean -d -f で中身ごと消し飛びます。普通しないけど。