我想忽略目录中除一个文件之外的所有文件。
我在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
是未跟踪的文件。
为什么会这样?
答案 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/
将只忽略当前目录中的那个