ディレクトリ内の拡張子のすべてのファイルをgitignore


191

ディレクトリ内のタイプのすべてのファイルを無視する方法はありますか?

** どうやらgitには意味がないので、これは機能しません。

/public/static/**/*.js

アイデアは、任意のネストされたフォルダーを一致させることです。


回答:


121

試したことはありませんが、 git help ignoreんが、.gitignorewithを*.jsin /public/staticに入れると、必要なことを実行できることを示唆しています。

注:以下のJoeysの回答も確認してください。特定のサブディレクトリ内のファイルを無視する場合は、ローカルの.gitignoreが適切なソリューションです(ローカリティは良好です)。ただし、同じパターンをリポジトリ全体に適用する必要がある場合は、**ソリューションの方が適しています。


19
それは必ずしも最善の解決策ではありません。潜在的に人々は、ファイルが無視されている理由を見つけるために、さまざまな.gitignoreファイルを掘り下げる必要があります。一部の人は、このすべての情報を1つの.gitignoreファイルに格納して、リポジトリのルートディレクトリに保存することを好みます。
haren 2016年

1
@harenそれだけが解決策ではありません-Joeyの答えも確かに有効です。あなたに最適なものを選択してください。ディレクトリにローカルな無視ルールはそのディレクトリにあるべきであり、グローバルルールはグローバルであるべきだと私は主張します。(また、この答えは古く、**は当時サポートされていなかったと思います)。
ptyx 2016年

209

ドキュメントによると、**構文はgitバージョン1.8.2.1によってサポートされているようです。

**フルパス名と照合されるパターン内の2つの連続するアスタリスク( " ")は、特別な意味を持つ場合があります。

  • 先頭に " **"とそれに続くスラッシュは、すべてのディレクトリで一致することを意味します。たとえば、「**/foofooはパターン「foo」と同じ場所のファイルまたはディレクトリ「」に一致します。「**/foo/barbarは、ディレクトリ「foo」の直下にあるファイルまたはディレクトリ「」に一致します。

  • 末尾の「/**」は、内部のすべてに一致します。たとえば、「abc/**abcは、.gitignoreファイルの場所を基準にして、ディレクトリ「」内のすべてのファイルに一致します。深さは無限です。

  • スラッシュとそれに続く2つのアスタリスク、それに続くスラッシュは、0個以上のディレクトリと一致します。たとえば、「a/**/b」は「a/b」、「a/x/b」、「a/x/y/b」などに一致します。

  • その他の連続するアスタリスクは無効と見なされます。


1
違いは何だxxx/**とはxxx/
thuzhf 2016年

9
xxx/**ターゲットのすべてのファイルとディレクトリの内部xxxに対し、xxx/ターゲットxxxディレクトリを直接。これは!、「ファイルの親ディレクトリが除外されている場合、ファイルを再インクルードすることは不可能です。」などのパターンを無効にする場合にのみ問題になるため、xxx/*またはxxx/**を使用する必要があります。
joeyhoer

4
末尾が.metaのファイルはすべて、gitによって無視されます。これはどのように作動しますか?**.js
ブラック、

「他の連続するアスタリスクは無効と見なされます。」それをすべて合計します
imrok

68

更新:@Joeyの答えを見てください:Git **がパターンの構文をサポートするようになりました。どちらのアプローチも正常に機能するはずです。


gitignore(5)のマニュアルページの状態:

パスと同じディレクトリ、または任意の親ディレクトリにある.gitignoreファイルから読み取られたパターン。上位レベルのファイル(作業ツリーの最上位レベルまで)のパターンは、下位のディレクトリのファイルにあるパターンで上書きされます。ファイルを含みます。

これは.gitignore、リポジトリの特定のディレクトリにあるファイルのパターンが、そのディレクトリすべてのサブディレクトリに影響することを意味します

あなたが提供したパターン

/public/static/**/*.js

(正しく指摘したように)**構文がGitで使用されていないため、これは正しくありません。また、先頭/はそのパターンをパス名の先頭に固定します。(したがって、/public/static/*.js一致します/public/static/foo.jsが一致しません /public/static/foo/bar.js。)およびのようなパスに一致する、先頭/を削除することも機能しません。public/static/foo.jsfoo/public/static/bar.js編集:先頭のスラッシュを削除するだけでも機能しません—パターンにはまだスラッシュが含まれているため、Gitではプレーンな非再帰的なシェルグロブとして扱われます(@Joey Hoerに感謝)これを指摘してします)。

@ptyxが示唆したように、ファイル<repo>/public/static/.gitignoreを作成し、次のパターンのみを含める必要があります。

*.js

先頭/にはがないため、パスのどの部分でも一致し、そのパターンは/public/staticディレクトリとそのサブディレクトリ内のファイルにのみ適用されます。


2
「主要取り外し特異的部分-これは完全に真実ではない/ような経路に一致する、のいずれかで動作しませんpublic/static/foo.jsfoo/public/static/bar.js。」は偽です。ドキュメントに引用するに「パターンにスラッシュ/が含まれていない場合、Gitはそれをシェルグロブパターンとして扱い、.gitignoreファイルの場所を基準としたパス名との一致をチェックします( .gitignoreファイルからではありません)。」foo/public/static/bar.jsパターンにはが含まれているため、一致しません/
joeyhoer 2014年

@JoeyHoerヒントのおかげで、それに応じて私の答えを更新しました。
Adam Sharp

9

追跡されていないファイルを無視するには、.git / info / excludeに移動します。除外は、無視された拡張子またはファイルのリストを含むファイルです。


1
これは.gitignoreのようにリポジトリの他のクローンに引き継がれません(もちろん、コミットされた後)。
jpmc26 2017

3

最も簡単な解決策はを使用することだと思いますfind.gitignoreサブディレクトリに何回もぶらぶらするのは好きではありません.gitignore。独自のトップレベルを管理することを好みます。これを行うには、見つかったファイルをに追加するだけです.gitignore。それ/public/static/があなたのプロジェクト/ gitホームであるとすると、私は次のようなものを使用します:

find . -type f -name *.js | cut -c 3- >> .gitignore

./gitが回避すべきファイルを理解するには、最初にを切り取ることがしばしば必要であることがわかりました。したがって、cut -c 3-

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.