Git正在忽略不在gitignore中的文件


117

我有一个git存储库,它会忽略图像文件以及其他一些文件,但是我的.gitignore文件中只有它忽略了config.php文件。我似乎找不到某个全局忽略文件吗?我必须指定文件以立即添加它们,这给了我这个警告:

.gitignore文件之一将忽略以下路径。

~/.gitconfig文件的内容只是我的电子邮件地址。


Answers:


198

git check-ignore

使用git check-ignore命令调试您的gitignore文件(排除文件)。

例如:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

上面的输出详细说明了每个给定路径名(包括行)的匹配模式(如果有)。

因此,也许您的文件扩展名不会被忽略,而是整个目录。

返回的格式为:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

或使用以下命令来打印您.gitignore的用户HOME和存储库文件夹:

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

或者使用git add -f允许添加否则被忽略的文件。

请参阅:man gitignoreman git-check-ignore以获取更多详细信息。

句法

git check-ignore [options]路径名...

git check-ignore [选项] --stdin


5
这比公认的答案要好得多。那个没有冒犯,但这挽救了我的一天。谢谢kenorb。
luanjunyi

1
应该得到更多的支持。发现某些/ vendor /文件夹中的某些奇怪gitignore导致了最新git版本的问题。
Manuel Arwed Schmidt

2
今天,这个人救了我... Visual Studio似乎在用户文档文件夹中创建了一个名为gitignore_global.txt的文件,这正在忽略我无法忽略的文件
Samuel

1
完全解决了我的问题。有些图案不容易被人抓住!
威拉

54

知道您的git配置可以包含core.excludesfile可能是一个好消息,该文件是具有其他模式被忽略的文件的路径。您可以通过运行(在有问题的git repo中)来查找是否具有这样的配置:

git config core.excludesfile

如果它显示文件路径,请查看该文件的内容以获取更多信息。

在我的情况下,我通过旧版本的boxen安装了git,而忽略了模式“ Icon?” 就我而言,这给了我这个问题中提到的有关文件夹图标的警告(我使用的是不区分大小写的文件系统,这就是为什么Icon?匹配图标的原因)。


2
这确实是我的问题。不知道如何或何时编辑此文件,但文件中列出了我想要的文件
toxaq 2014年

2
谢谢,您为我节省了数小时的痛苦。在我的情况下,是源树的安装(一种可视化git repo的工具),该文件在文件文件夹gitignore_global.txt下不合逻辑地创建,其中包括大量排除项。
机械对象

我也Icon?被该死。
贾斯汀·斯基尔斯

对我来说就是这种情况。全局忽略文件中有很多规则。感谢小费+1
疯狂

我全局忽略了* .json-谈论一场噩梦-谢谢!
Jason Perfetto

31

检查这些:

  1. 您是否正在寻找其他.gitignore文件,因为它们可能很多。

  2. 另外,查看REPO / .git / config以查看是否有任何内容。

  3. 回购排除可以将本地每个回购规则添加到回购中的.git / info / exclude文件中。这些规则未与存储库一起提交,因此不会与其他人共享。此方法可用于您不希望其他用户生成的本地生成的文件,例如您的编辑器创建的文件。


存储库中没有其他.gitignore文件,.git / config文件中也没有任何可忽略任何内容的文件。.git / info / exclude如何配置?
伊恩·亨特

4
目前尚不清楚为什么将此答案标记为已回答。该问题如何解决?

排除是我的问题。我知道还有另一种忽略的方法,我过去曾经使用过,但是忘记了它在哪里!
Chucky

22

我有同样的问题-git忽略此目录,并显示以下错误:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

我终于发现我的问题出在我的一行~/.gitignore_global

TAGS

匹配路径app/views/admin/tags。我通过在全局gitignore文件中添加前导斜杠来解决此问题

/TAGS

git开始再次跟踪我的目录。


3
+1使我寻找部分匹配项... gitignore_global.txt包含“ [Rr] elease * /”,这导致我的“ releasenotes”目录被忽略。
特雷夫(Trev)

为了使它更加困难,git只会忽略新添加的文件,而不会回购已在仓库中的文件。因此,当我在.gitignore中添加“ foo /”时,它只会忽略foo子目录中最近添加的文件,而不会忽略所有文件。花了我一个小时来弄清楚为什么有些文件被忽略而另一些文件却没有被忽略。
ccleve

我也有同样的问题。SourceTree在“工具”菜单->“选项”项->“ Git”选项卡中设置〜/ .gitignore_global文件。在我清理了“全局忽略”字段后,“ git add ...”命令起作用了。
凯特

我遇到过同样的问题。我有help被忽略的目录。幸运的是,我很快找到了您的答案。
Abdul Sadik Yalcin

9

对我来说,我偶然在〜/ ​​.gitignore_global文件中使用了通配符。也许在那里检查?


1
那正是我的问题。我在那里有* .png,不知道它是怎么到达那里的。
沙哈尔

3

可以尝试的另一件事:我有一个目录B,其目录.git库嵌套在我的项目目录A下(但不作为子模块)。我对B进行了一些更改,并希望使其成为一个真正的子模块。我相信git A会自动忽略B,因为它包含自己的存储库(请参阅嵌套的git存储库,没有子模块?)。我重命名了B文件夹,并尝试将其再次克隆为子模块,这给我带来了误导性的“被.gitignore忽略”错误消息。解决的办法是.git从B中删除 。


2

我遇到了和你完全一样的问题。您得到的唯一答复列出了一些要检查的地方,但没有一个为我解决问题,从您的评论中我也不会为您考虑。我没有其他.gitignore文件隐藏在目录树中的较低位置;.git / config中没有任何内容;.git / ingore / exclude中没有任何内容

如果仍然有问题,请检查此答案。它为我解决了这个问题

基本上,检查〜/ .gitignore文件。我的被​​称为〜/ .gitignore_global。我不知道它是什么时候创建的(当然没有做到),但是我第一次安装时尝试了很多不同的git设置,所以其中一个必须放在那里。

希望他的回答对您有帮助!


1

从git收到此错误消息的另一个原因是在执行git submodule add命令时前一个git命令崩溃并离开了锁定文件(例如,当您使用包含git命令的自定义脚本并且没有注意到崩溃)。

如果git commit改为执行命令,则没有任何条件发生变化(git submodule add将继续大喊.gitignore文件归咎于您),您将看到另一个错误报告:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

并确实删除了锁定文件:

rm .git/index.lock

解决了问题。(这发生在git版本2.1.0.9736上。它可能会在将来的git版本中修复。)


谢谢,原来这是我遇到的问题。救生员!
JDawgg '17

1

检查您是否拥有该文件夹的权限。我刚遇到这个问题,这是因为该文件夹归www-data用户所有,而不是我作为登录终端所拥有的用户。


1

就我而言,这是造成问题的正斜线。

不行

/srv/bootstrap/

工作

srv/bootstrap/

1

还有一件事:如果您所在的目录需要root权限才能进行写入或执行,请确保您位于root用户上。实际上,我在尝试添加子模块时遇到了一个奇怪的错误,git一直抱怨我克隆到的路径被git ignore文件忽略了。然后,我更改为root用户,再次运行子模块添加,没有问题。


0

还请检查~/.gitignore~/.gitignore_global哪些是由某些Git客户端创建的(例如,Mac OS X上的Atlassian SourceTree)。


0

确保.gitignore文件没有忽略自身。一个常见的错误是向文件添加*规则,.gitignore以忽略当前文件夹中的每个文件。解决方案是在上添加一个例外.gitignore

*
!.gitignore

这样,目录中的所有文件都将被忽略,除了.gitignore

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.