如何仅从Git中的根文件夹中排除文件


399

我知道使用.gitignore文件来排除添加的某些文件,但是我config.php在源代码树中有几个文件,我只需要排除一个位于根目录中的文件,而其他文件则受版本控制。

我应该写些什么.gitignore来实现这一目标?

Answers:


588

文档中

如果该模式不包含斜杠/,则git将其视为shell glob模式,并检查相对于.gitignore文件位置的路径名是否匹配(如果不是来自.gitignore,则相对于工作树的顶层)文件)。

前导斜杠与路径名的开头匹配。例如,“ / *。c”匹配“ cat-file.c”,但不匹配“ mozilla-sha1 / sha1.c”。

因此,您应该在根目录中添加以下行.gitignore

/config.php

1
谢谢!我以这种方式尝试过,但是由于某种原因它没有起作用。可能在某处输入错误=)
Pavel Karoukin 2010年

1
如果它不是文件而是文件夹,并且我想忽略仓库根目录中的该文件夹,它包含的文件以及所有后代子文件夹及其文件,该怎么办?/folder/
CodeManX

11
无论是/folder//folder将工作,但在两端加上斜杠限制了比赛唯一的文件夹。如果您在根目录中有一个名为“ foo”的文件,则/foo/不会忽略它,但是/foo会忽略它。
tehDorf

如果您已经提交了文件,请运行command git rm --cached <file>,否则该文件将不会被忽略。来自:stackoverflow.com/a/1274447
Bruno Polo


29

较旧版本的git要求您首先定义忽略模式,然后立即(在下一行)定义排除。[在版本1.9.3(Apple Git-50)上进行了测试]

/config.php
!/*/config.php

更高版本仅需要以下内容[已在2.2.1版上测试]

/config.php

17

如果上述解决方案对您不起作用,请尝试以下操作:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

这确实对我有用,而/config.php仅此一个无效。我很好奇为什么没有。你有想法吗?
iago-lito'正在考虑

@ iago-lito如果您在某个特定项目上工作并努力解决如何忽略某个特定目录中的file.ext,同时又不忽略其他任何地方的问题,则将其放在/home/me/.gitignore文件中: /home/me/path/to/my/project/some/folder/file.ext或file.ext忽略文件,然后在/ home / me / path / to / my / project / some / folder / .gitignore文件将此!file.ext放到仅在此特定目录中的该文件中。每个文件夹可以有其自己的.gitignore文件,以覆盖任何父.gitignore文件的设置...
drugan

嗯 这意味着该回购协议的行为可能会有所不同,具体取决于其他用户~/.gitignore在自己的计算机上是否有不同的文件,对吗?
iago-lito'正在考虑

是的,如果您的项目可能存在于未知环境中,则您永远不要依赖项目根文件夹上方的.gitignore文件。请记住,像config.php这样的文件名很常见,因此请在根.gitignore文件中覆盖此文件的所有可能存在的设置。
drugan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.