101

同様の質問 ( 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表示する通常の動作が必要です。

私はついにここで解決策を得ました。解決策は、フォルダーに別の.gitignoreファイルを追加することです。Resourcesこれは正しく動作します。

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、他のファイルを追跡します。

4

4 に答える 4

120

@SimonBuchanは正しいです。

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

于 2014-09-18T15:25:11.240 に答える
28

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

# 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

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

于 2013-07-23T21:44:00.947 に答える
7

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

于 2017-05-17T08:14:54.643 に答える