git忽略除一个扩展名和文件夹结构之外的所有文件

时间:2014-07-10 13:30:36

标签: git gitignore

这是我的.gitignore:

#ignore all kind of files
*
#except php files
!*.php

我想要的只是忽略除了.php之外的所有文件,但是使用这个.gitignore我也忽略了文件夹......

有没有办法告诉git接受我的项目文件夹结构,同时只保留.php文件的轨道?

现在好像我无法在我的仓库中添加文件夹:

vivo@vivoPC:~/workspace/motor$ git add my_folder/
The following paths are ignored by one of your .gitignore files:
my_folder
Use -f if you really want to add them.
fatal: no files added

4 个答案:

答案 0 :(得分:21)

这很简单,只需在!my_folder

中添加另一个条目.gitignore即可
#ignore all kind of files
*
#except php files
!*.php
!my_folder

最后一行将特别注意my_folder,并且不会忽略其中的任何php文件;但由于*的第一种模式,其他文件夹中的文件仍会被忽略。

修改

我想我误解了你的问题。如果要忽略除.php个文件以外的所有文件,可以使用

#ignore all kind of files
*.*
#except php files
!*.php

这不会忽略任何没有扩展名的文件(例如:如果您有README而不是README.txt),并且会忽略任何包含.的文件夹在其名称中(例如:名为module.1的目录)。

FWIW,git doesn't track directories,因此无法为目录与文件指定忽略规则

答案 1 :(得分:6)

我有类似的问题;我想将*.c列入白名单,但接受的答案对我不起作用,因为我的文件不包含“。”。

所以对于那些想要处理的人:

# ignore everything
*

# but don't ignore files ending with slash = directories
!*/

# and don't ignore files ending with ".php"
!*.php

答案 2 :(得分:1)

请注意,如果 ! 无效,则您可能排除了一个文件夹。来自the docs(强调我的):

<块引用>

一个可选的前缀“!”这否定了模式;任何匹配的文件 被先前模式排除的将再次包含在内。 不是 如果该文件的父目录是,则可以重新包含该文件 排除。 Git 不会列出排除的目录以提高性能 原因,所以包含文件上的任何模式都不起作用,无论 它们被定义的地方。

答案 3 :(得分:0)

这对我有用(不包括.gitkeep文件以外的所有imgs文件夹内容)

/imgs/**/*.*
!/imgs/**/.gitkeep