特定のファイルタイプを除いて、特定のフォルダーの下にあるすべてのファイルを再帰的に正しく無視する


89

私は同様の質問(見てきた12および3を)が、私は彼らからの適切な解決策を得ることはありません。

特定のファイルタイプを除いて、特定のフォルダーの下にあるすべてのファイルを無視する必要があります。フォルダは、ルートパスのサブディレクトリです。フォルダに名前を付けますResources。複雑にしたくないので、名前が付けられResourcesているすべてのフォルダの下にあるファイルは無視してください。

これが最も一般的な解決策です(すべての重複する質問で)

# Ignore everything
*

# Don't ignore directories, so we can recurse into them
!*/

# Don't ignore .gitignore
!.gitignore

# Now exclude our type
!*.foo

このソリューションの問題は、新しく追加されたファイルの追跡を停止することです*すべてのファイルを無視するため)。すべてのファイルタイプを除外し続けたくありません。新しいファイルが追加された場合にそれを表示する通常の動作が必要git statusです。

私は最終的にここで解決策を得ました。解決策は.gitignoreResourcesフォルダーに別のファイルを追加することです。これは正しく動作します。

1つの無視ファイルで同じことを達成できますか?さまざまなディレクトリにある無視ファイルがたくさんあるのは少し不格好です。

これは私が達成しようとしていることです:

# Ignore everything under Resources folder, not elsewhere
Resources

# Don't ignore directories, so we can recurse into them
!*Resources/

# Now exclude our type
!*.foo

しかし、これは反対の出力を与えます。*.fooタイプを無視し、他のファイルを追跡します。

回答:


108

@SimonBuchanは正しいです。

git 1.8.2以降、Resources/** !Resources/**/*.foo動作します。


1
これは私にとってはうまくDirectoryName1/** DirectoryName1/**/*いきます。微調整します。ディレクトリとその下にあるすべてのものを削除する必要があるので、私はそうしました。もみはディレクトリを削除しますが、すべてのファイルタイプを削除するには2番目が必要です。
Scala Enthusiast

27

最善の答えは、以下のリソースを含むリソースの下にResources / .gitignoreファイルを追加することです。

# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo

その.gitignoreファイルを追加したくない、または追加できない場合は、次のようなエレガントな解決策があります。

# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo

指定より深いディレクトリを追加する場合は、そのパターンを編集する必要があります。


2
それは悲しい..確かに私はより深いディレクトリを持っているので、最初のものに固執する:(
nawfal

同じソリューションの詳細については、こちらをご覧ください:stackoverflow.com/questions/7803689/…-上記のOP @nawfalからもリンクされています
こちらの

7

これは馬鹿げているように見えるかもしれませんが、無視しようとしているフォルダやファイルを以前にインデックスに追加していないかどうかを確認してください。そうした場合は、.gitignoreファイルに何を入れてもかまいません。フォルダ/ファイルはステージングされます。


5
誰かがこの特定のユースケースgit rm --cached <path to files>に遭遇した場合、それらを使用して、無視されたファイルをファイルシステムに残したまま、gitからそれらをクリアできます。
slothluvchunk

5

私がそれを間違って行っているか、受け入れられた答えが現在のgitではもはや機能しません。

私は実際に適切な解決策を見つけて、ほぼ同じ質問の下に投稿しました。詳細はこちらをご覧ください。

解決:

# Ignore everything inside Resources/ directory
/Resources/**
# Except for subdirectories(won't be committed anyway if there is no committed file inside)
!/Resources/**/
# And except for *.foo files
!*.foo

2
はい、これでうまくいきます。の追加は、!/Resources/**/gitがサブディレクトリを無視しないようにするために重要でした。
ジョンスター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.