web-dev-qa-db-ja.com

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

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

**は明らかにgitにとって無意味なので、これは機能しません:

/public/static/**/*.js

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

152
Harry

試したことはありませんが、git help ignoreは、.gitignoreとともに*.js/public/staticに入れると、あなたが望むことをすることを提案します。

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

105
ptyx

**構文は、 ドキュメント に従って、バージョン1.8.2.1の時点でgitでサポートされているように見えます。

完全パス名と一致するパターン内の2つの連続するアスタリスク( "**")には、特別な意味があります。

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

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

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

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

175
joeyhoer

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


gitignore(5)manページ 状態:

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

これが意味するのは、リポジトリの任意のディレクトリにある.gitignoreファイルのパターンがそのディレクトリおよびすべてのサブディレクトリに影響することです。

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

/public/static/**/*.js

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

@ptyxが示唆したように、あなたがする必要があるのは、ファイル<repo>/public/static/.gitignoreを作成し、このパターンだけを含めることです:

*.js

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

62
Adam Sharp

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

9
Thiago Ramos

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

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

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

2
Garini