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

问题描述 投票:0回答:5

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

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

有没有办法告诉 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
git gitignore
5个回答
64
投票

这很简单,只需在您的

!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 不跟踪目录,因此无法为目录与文件指定忽略规则


39
投票

我也有类似的问题;我想将

*.c
列入白名单,但接受的答案对我不起作用,因为我的文件不包含“.”。

对于那些想要解决这个问题的人:

# ignore everything
*

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

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

17
投票

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

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

6
投票

请注意,如果

!
不起作用,则您可能排除了某个文件夹。来自文档(强调我的):

可选前缀“!”这否定了模式;任何匹配的文件 被先前模式排除的将再次被包含。 不是 如果该文件的父目录是,则可以重新包含该文件 排除。 Git 不会列出出于性能原因排除的目录 原因,因此包含文件上的任何模式都没有效果,无论 它们的定义位置。


0
投票

找不到我要找的那个,所以添加对我有用的那个。

以下声明指出,

  1. 忽略一切(包括递归子目录)
  2. 排除特定文件被忽略
  3. 排除所有子目录被忽略

现在,如果您记下

step-3
,您就会看到它
has cumulative effect of step-1, 2 declarations
。即,当递归地忽略每个子目录时,忽略该子目录直接下的所有内容,除了步骤 2 中忽略的少数文件。这将是
carried out for each subdir that is being processed
,因此声明的顺序/顺序很重要。

.gitignore
文件应包含

# !! NOTE: the sequence of declaration is important !!

# Ignore Everything
*

# Exclude specific files from being ignored (override)
!.gitignore
!*.xml

# overrides stated above, applies to all dir (root and subdirs - recursively)
!**/

© www.soinside.com 2019 - 2024. All rights reserved.