正确忽略特定文件夹下的所有文件,除了特定的文件types

我已经看到类似的问题( 1,2和3 ),但是我没有从他们那里得到适当的解决scheme。

除了特定的文件types,我需要忽略特定文件夹下的所有文件。 该文件夹是根path的子目录。 让我命名文件夹Resources 。 由于我不想让事情复杂化,所以让我忽略名为Resources所有文件夹下的文件,无论它在哪里。

这是最常见的解决scheme(在所有重复的问题中)

 # Ignore everything * # Don't ignore directories, so we can recurse into them !*/ # Don't ignore .gitignore !.gitignore # Now exclude our type !*.foo 

这个解决scheme的问题是, 它停止跟踪新添加的文件 (因为*忽略所有文件)。 我不想排除每个文件types。 我想正常的行为,如果任何新的文件被添加, git status显示它。

我终于在这里得到了解决scheme。 解决方法是在Resources文件夹中添加另一个.gitignore文件。 这工作正常。

我可以用一个忽略文件来实现吗? 我发现在不同的目录中有许多忽略文件有点笨重。

这是我想要实现的:

 # Ignore everything under Resources folder, not elsewhere Resources # Don't ignore directories, so we can recurse into them !*Resources/ # Now exclude our type !*.foo 

但是这给出了相反的结果。 它忽略*.footypes并跟踪其他文件。

@SimonBuchan是正确的。

由于git 1.8.2, Resources/** !Resources/**/*.foo作品。

最好的答案是在包含以下内容的资源下添加Resources / .gitignore文件:

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

如果您不愿意或无法添加.gitignore文件,则会出现一个不雅的解决scheme:

 # 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 

如果您添加比指定更深的目录,则需要编辑该模式。

这可能看起来很愚蠢,但是检查你是否还没有添加你试图忽略的文件夹/文件之前。 如果你这样做了,那么把你的.gitignore文件放在哪里并不重要,文件夹/文件仍然会被放置。