2013-07-23 39 views
52

我看过类似的问题(123),但我没有从它们中找到适当的解决方案。正确地忽略特定文件夹下的所有文件,除了特定的文件类型

我需要忽略除特定文件类型以外的特定文件夹下的所有文件。该文件夹是根路径的子目录。让我命名文件夹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显示它。

我终于找到了解决方案here。解决方案是在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 

但是这给输出相反。它忽略了*.foo类型并跟踪其他文件。

回答

70

@SimonBuchan is correct.

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

+1

这适用于我,稍作调整,我只需要删除目录和下面的所有内容,所以我做了:'DirectoryName1/** DirectoryName1/**/*'为他们每个人。杉木删除目录,但你需要第二删除所有文件类型。 –

22

最好的答案是增加一个资源/ .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

+0

请参阅相同的解决方案在这里进一步的细节:http://stackoverflow.com/questions/7803689/gitignore-ignore-all -files-in-folder-hierachy-except-one-specific-filetype - 也由OP @nawfal – here

+30

链接上面由于git 1.8.2,'Resources/**''!Resources/**/*。foo'工程 –

1

这可能看起来很愚蠢,但请检查您是否尚未将您试图忽略的文件夹/文件添加到索引中。如果你这样做了,你放在.gitignore文件中的内容并不重要,文件夹/文件仍然会被放置。

相关问题