Gitのホワイトリストとサブディレクトリ

テキストファイルのみのホワイトリストを作成しました。

*
!*.txt

さて、私は、 sub/dir/file.txt というサブディレクトリにuntrackedテキストファイルがあり、これは表示されません(無視されます)。ただし、ルートディレクトリのテキストファイルが表示されます。

それはなぜですか、どうすれば修正できますか?

64
追加された 著者 Johnsyweb,
@ davidkennedy85私はその違いを強調するために質問を編集し、再オープンのためにマークしました。
追加された 著者 sashoalm,
基本的にこれはその他の質問の複製ですが、これは正解です...
追加された 著者 Tobias Kienzler,
私はこれがどのように重複しているかわかりません。もう1つの質問は、特定のファイルをホワイトリストに登録する方法を尋ねる一方で、サブフォルダを含む特定のファイルタイプをホワイトリストに登録する方法を尋ねます。実際には、 stackoverflow.com/questions/8024924/…
追加された 著者 David Kennedy,
fwiw、このトピックに関する重複した回答のおばあちゃん、あなたが見なければならないものはおそらく .gitignoreがいくつかのファイルを除いてすべてを無視するようにします.-非常に規則的な活動といくつかの良い答えです。私は明確で徹底したこの回答のファンです。
追加された 著者 Kay V,
サブディレクトリに含めるファイルはありますか?その場合、このサブディレクトリは .gitignore の最初の星で既に無視されている可能性があります。
追加された 著者 fajran,
それでも問題がなければ、 .gitignore はサブディレクトリ内にあり、そのサブディレクトリ内のすべてをフィルタリングすることができます。
追加された 著者 fajran,
はい。私の例では、これらのファイルは、11.1.102.55フォルダと同じディレクトリ構造になります。ネストはフォルダ/製品間で必ずしも同じではありません。
追加された 著者 Nate,
私はこの機能を知っています。私たちは何百ものディレクトリを持っています。各ディレクトリに対して1つのgitignoreを作成するよりも、必要としないファイルタイプを明示的に無視するほうが速いでしょう。私は本当に.gitignoreファイルからホワイトリスト機能を得る方法を探しています。
追加された 著者 Nate,

1 答え

そうした方法で試してみると、あなたの構造内のディレクトリをブラックリストに登録することになるので、失敗します。

解決するには、ディレクトリではないすべてのものをブラックリストに載せたいが、コミットするファイルタイプの1つではなく、ディレクトリをブラックリストに登録しない

これを行う .gitignore ファイル:

# First, ignore everything
*
# Now, whitelist anything that's a directory
!*/
# And all the file types you're interested in.
!*.one
!*.two
!*.etc

*。 * .2 およびの存在下で、 .txt ファイルの3レベル構造のホワイトリストでこれをテストしました。リポジトリのルートディレクトリにある .gitignore を使用して、3つの .gitignore ファイルを追加する必要はありません。

私が答えを見つけ出すために使った情報は、とりわけ、これです(stackoverflow.com)。

100
追加された
実際にホワイトリストにという接頭辞を忘れていませんか?
追加された 著者 ThiefMaster,
私の答えはこちらをご覧ください: stackoverflow.com/questions/987142/… /* を使用すると、トップレベルのフォルダだけをブラックリストにすることができますが、これは実際には .gitignore がホワイトリストに登録されたフォルダのサブフォルダを参照してはならないことを意味します。
追加された 著者 Ryan Taylor,
* を使用する場合は、!。gitignore というエントリも必要ですか?
追加された 著者 sjas,