web-dev-qa-db-ja.com

Gitで無視されるディレクトリのサブディレクトリを無視しない

ディレクトリを無視したが、その中の特定のサブディレクトリを無視したくないとしましょう。だから私はセットアップがあります:

/uploads/
/uploads/rubbish/
/uploads/rubbish/stuff/KEEP_ME/
/uploads/foo/
/uploads/foo/bar/lose/

そして、KEEP_MEディレクトリ以外のすべてを無視したいと思います。無視が次のようになることを願っています。

/uploads/*
!/uploads/rubbish/stuff/KEEP_ME/

しかし、それは機能せず、同じテーマでのいくつかの順列も機能しません。

動作するのは

/uploads/**/**/**/
!/uploads/rubbish/stuff/KEEP_ME/

しかし、それは少し制限的で冗長に感じますか?

78
Wil

gitignoreドキュメントのパターン形式セクション

オプションのプレフィックス「!」パターンを無効にします。以前のパターンで除外された一致するファイルは再び含まれます。 ファイルの親ディレクトリが除外されている場合、ファイルを再インクルードすることはできません。 Gitはパフォーマンス上の理由から除外されたディレクトリをリストしないため、含まれているファイルのパターンは、それらがどこで定義されていても効果がありません。最初の「!」 「!important!.txt」など、リテラル「!」で始まるパターンの場合。

したがって、以前に除外された親ディレクトリ/uploads/rubbish/stuff/keep/パターンは、その内容を無効にする前に排他的に無効にする必要があります。

#ignore everything within /uploads/ 
/uploads/*

#include everything within /uploads/rubbish/stuff/keep
!/uploads/rubbish/stuff/keep/  
!/uploads/rubbish/stuff/keep/*

/uploads/rubbish/stuff/keep/内にサブディレクトリを含めるには、3行目を追加します。

!/uploads/rubbish/stuff/keep/**/*
100
Art Shayderov

.gitignoreに何かを追加しても、force gitでインデックスに追加できます

git add --force uploads/rubbish/stuff/KEEP_ME/

ただし、「KEEP_ME」はディレクトリのようであり、通常gitは空のフォルダを好みません。そのため、フォルダが空の場合は、代わりに「プレースホルダ」ホルダファイルを追加する必要があります。

git add --force uploads/rubbish/stuff/KEEP_ME/.keep_me
29
KingCrunch

一般的な除外ですべてのフォルダーを除外するときに特定のフォルダーを含める方法を見つけようとしました

**/build

/*を汎用除外の最後に追加すると、引き続きすべてのビルドファイル**/build/*が除外されます

次に、別の行を追加して、含めるパスを次のように修正します。

!**/folder/build/* 

私たちに読むgitignoreを残します

**/build/* 
!**/folder/build/* 
5
John

Buo-Ren Lin および John の回答は非常に役立ちますが、両方を組み合わせる必要がありました。

アップロード内のファイルだけでなく他のサブフォルダーも除外したい場合、特定のフォルダーの前に任意のディレクトリを明示的に指定する必要があることがわかりました両方ともフォルダーを除外し、サブフォルダーを含めて

**/uploads/*
!**/uploads/rubbish/
!**/uploads/rubbish/*

また、フォルダー内のアイテムとサブフォルダーの両方を表示するには、サブフォルダーとそのコメントの両方を明示的に再含める必要があることがわかりました。

0
Josiah Yoder