2

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

我在我的 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这是一个未跟踪的文件。为什么会这样?

4

3 回答 3

4

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

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

dir_to_ignore/*
!second_file.txt

这将忽略dir_to_ignoresecond_file.txt. 您仍然需要跟踪目录才能跟踪second_file.txt.

于 2013-05-25T02:28:40.003 回答
2

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

*
!second_file.txt
!.gitignore

(假设您可能也想对新.gitignore文件进行版本控制)

于 2013-05-25T02:25:42.350 回答
0

使用dir_to_ignore/git 之类的规则将完全忽略该目录。它永远不会往里看,因此!dir_to_ignore/second_file.txt永远不会匹配第二条规则。

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

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

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

于 2013-05-25T07:47:25.463 回答