web-dev-qa-db-ja.com

.gitignoreで否定パターンはどのように機能しますか?

否定パターン(!で始まる行)で.gitignoreファイルを使用しようとしていますが、期待どおりに機能しません。

最小限の例として、次のディレクトリ構造があります。

C:/gittest
 -- .gitignore
 -- aaa/
   -- bbb/
     -- file.txt
   -- ccc/
     -- otherfile.txt

私のgitignoreファイルには、これがあります:

aaa/
!aaa/ccc/

私の理解( このドキュメントページ に基づく)は、ファイルaaa/ccc/otherfile.txtを無視すべきではないが、実際にはgitはaaaの下のすべてを無視するということです。

私はこの文を誤解していますか?「パターンを否定するオプションの接頭辞!前のパターンによって除外された一致するファイルは再び含まれます。」

ところで、これはWindowsでmsysgit 1.7.0.2を使用しています。

75
Chris Perkins

あなたが実際にやりたいことは:

aaa/*
!aaa/ccc

aaaを見てはいけない」と言っているので、パスaaa/cccを調べることすらありません。ワイルドカードを使用する場合、aaaの内容は引き続き読み取られますが、各エントリはワイルドカードと一致し、aaa/cccを除く無視されます。

132
Cascabel

git statusを実行する前にgit update-indexに新しく無視されていない項目がまだ表示されていない場合は、gitが変更を確認するのに役立ちます(少なくともバージョン1.9.xのgitbashで)。

1
alexkb