ディレクトリ内の特定のタイプのファイルをすべて無視する方法はありますか?
**
明らかに git にとって無意味なので、これは機能しません:
/public/static/**/*.js
アイデアは、任意のネストされたフォルダーに一致することです。
ドキュメントによると、現在のバージョンで構文**
がサポートされているようです。git
1.8.2.1
**
完全なパス名に対して一致するパターンの2 つの連続するアスタリスク (" ") には、特別な意味がある場合があります。
先頭の "
**
" とそれに続くスラッシュは、すべてのディレクトリで一致することを意味します。たとえば、" "は、パターン " " と同じように、任意の場所の**/foo
ファイルまたはディレクトリ " " に一致します。" " は、ディレクトリ " "の直下にあるファイルまたはディレクトリ " " と一致します。foo
foo
**/foo/bar
bar
foo
末尾の "
/**
" は、内部のすべてに一致します。たとえば、"abc/**
" はディレクトリ " " 内のすべてのファイルに一致します。ファイルabc
の場所を基準にして、.gitignore
深さは無限です。スラッシュの後に 2 つの連続するアスタリスクが続くと、スラッシュは 0 個以上のディレクトリに一致します。たとえば、" "は " "、" "、" " などに
a/**/b
一致します。a/b
a/x/b
a/x/y/b
その他の連続するアスタリスクは無効と見なされます。
試したことはありませんが、 withを にgit help ignore
入れると、必要なことが実行されることを示唆しています。.gitignore
*.js
/public/static
注: 以下の Joeys の回答も必ず確認してください: 特定のサブディレクトリ内のファイルを無視する場合は、ローカルの .gitignore が正しい解決策です (局所性は良好です)。ただし、レポ全体に同じパターンを適用する必要がある場合は、 ** ソリューションの方が適しています。
更新: @Joeyの回答**
を見てください: Gitはパターンの構文をサポートするようになりました。どちらのアプローチもうまくいくはずです。
gitignore(5) の man ページには次のように記載されています。
パスと同じディレクトリまたは任意の親ディレクトリにある .gitignore ファイルから読み取られたパターン。上位レベルのファイル (ワーク ツリーのトップレベルまで) のパターンは、下位レベルのファイルのパターンによって上書きされます。ファイルを含みます。
.gitignore
これが意味することは、レポの任意のディレクトリにあるファイルのパターンが、そのディレクトリとすべてのサブディレクトリに影響するということです。
ご提供いただいたパターン
/public/static/**/*.js
まず、(正しく指摘したように)**
構文がGitで使用されていないためです。また、/
パス名の先頭にパターン化された先頭のアンカー。(したがって、/public/static/*.js
は一致します/public/static/foo.js
が、 は一致しません /public/static/foo/bar.js
。)先頭を削除しても機能せず、との編集: 先頭のスラッシュを削除するだけでは機能しません — パターンにはまだスラッシュが含まれているため、Git によって単純な非再帰シェル グロブとして扱われます (これを指摘してくれた@Joey Hoerに感謝します)。/
ようなパスが一致します。public/static/foo.js
foo/public/static/bar.js
<repo>/public/static/.gitignore
@ptyx が示唆したように、ファイルを作成し、次のパターンのみを含める必要があります。
*.js
先頭/
に がないため、パスのどの部分でも一致し、そのパターンは/public/static
ディレクトリとそのサブディレクトリ内のファイルにのみ適用されます。
追跡されていないファイルを無視するには、.git/info/exclude に移動します。Exclude は、無視される拡張子またはファイルのリストを含むファイルです。
他の回答に加えていくつかの追加のヒント (運が良く、問題が他の理由によるものである場合に役立つ可能性があります):