忽略GIT中使用negate前缀的目录中的所有文件

时间:2013-05-25 02:10:49

标签: git version-control gitignore

我想忽略目录中除一个文件之外的所有文件。

我在git bash中执行以下操作。

$ mkdir dir_to_ignore
$ cd dir_to_ignore
$ vi file_to_ignore.txt 
# (I put some content and save the file)
$ vi second_file.txt
# (Some text and then save the file. I dont wish this file to be ignored)
$ cd ..
$ vi .gitignore 

我将以下内容放入.gitignore文件中:

dir_to_ignore/
!dir_to_ignore/second_file.txt

但现在当我git status时,我看不到second_file.txt是未跟踪的文件。 为什么会这样?

3 个答案:

答案 0 :(得分:4)

忽略目录似乎有点奇怪,但是尝试跟踪被忽略目录中的文件,因为要跟踪文件,您可能需要知道文件的完整路径,包括它所在的目录。

如果您将.gitignore文件更改为此内容:

dir_to_ignore/*
!second_file.txt

将忽略dir_to_ignore下除second_file.txt以外的所有文件。您仍然需要跟踪目录,以便跟踪second_file.txt

答案 1 :(得分:2)

您可以通过在.gitignore目录中创建dir_to_ignore文件并将其放入其中来实现您想要的目标

*
!second_file.txt
!.gitignore

(假设您可能希望版本控制新的.gitignore文件)

答案 2 :(得分:0)

使用像dir_to_ignore/这样的规则git将完全忽略该目录。它永远不会向内看,因此永远不会匹配像!dir_to_ignore/second_file.txt这样的第二条规则。

要获得所需的效果,您需要忽略目录中的所有文件,而不是忽略目录本身,例如dir_to_ignore/*。与第二个规则一起,git现在将忽略除second_file之外的所有文件。

当您决定忽略除dir_to_ignore之外的dir_to_ignore/some/long/path时,这种情况会变得更加棘手。 - 大多数情况下,最好不要使用异常,只说明你想要忽略的内容。如果您需要例外,您应该再考虑一下项目结构。

顺便说一句:请注意,像dir_to_ignore/这样的行将在整个项目中忽略具有该名称的所有目录,而/dir_to_ignore/将只忽略当前目录中的那个