Git未检测到文件并且不在.gitignore中。

77

我有一个名为“style.css”的文件,但是git没有检测到它。如果我删除它,它也不会检测到,但如果我更改文件名,则会检测到。但我需要保留那个名称。

该文件未在.gitignore文件中。这让我疯狂!

我需要一些帮助。


先尝试执行命令 "git add .",然后检查 git 状态。如果这不起作用的话,进入文件目录并尝试执行命令 "git add style.css",然后再次执行 git 状态...我认为这样会起作用。 - Kristian
1
文件已经在过去添加和提交了。但是现在无法检测到更改,甚至当我删除该文件时也不行。 - jonfer
你有检查过其他的gitignore位置吗?https://dev59.com/qGox5IYBdhLWcg3wGwlo - dule
你是否在使用不区分大小写的文件系统?也许是OSX? - Paul Beckingham
顺便提一下,我遇到了这个问题,并通过使用“git rm”删除有问题的文件来解决它。提交删除后,我能够重新添加修改后的文件。 - Mauricio Scheffer
显示剩余7条评论
17个回答

117

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

例如:

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

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

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

返回的格式为:

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

或者使用以下命令在用户和仓库文件夹中打印你的.gitignore

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

或者使用 git add -f <path/file>,这可以添加被忽略的文件。

更多详情请参阅:man gitignoreman git-check-ignore


13
使用命令 "git add -f ." 可以在不克隆存储库的情况下为我解决问题。 - Joe
3
这应该被接受作为答案,因为它揭示了问题实际存在的位置。 - Michael Thiel
1
这对我解决了问题。我有一个整个文件夹没有显示任何错误或不合适的地方。在其中一个文件上运行git add -f,一切都恢复正常了。有时候GIT的随机性真的很让人沮丧。谢谢! - Jimbo
谢谢。正如我所怀疑的那样,该路径被设置为子模块。但它在配置中没有任何地方,也不能使用“submodule deinit”删除。幸运的是,我刚刚创建了该仓库,所以我只需删除.git文件夹并重新初始化git即可。 - andho
git add -f %relativepath%。例如:git add -f folder\file.xml,以更明确地说明。 - Graviton

19

另外需要注意的是,虽然这种情况比较罕见,但我曾经遇到过这个问题。我将一些已经与仓库相关联的文件从一个目录复制/粘贴到另一个目录。

但同时也复制了.git文件夹,这导致git无法检测到该文件夹。

因此,我的文件夹结构如下,即使设置了Original Project 1仓库,git仍无法检测到Folder 2:

--Original Project 1
    --.git
    --Folder 1
    --Folder 2
         --.git
         --Many other files/folders

删除子文件夹.git解决了我的问题。


这对我也起作用了,但更糟糕的是我的.git文件夹被隐藏了,在Windows中通常不会这样。我不得不使用终端来查看和删除它。 - André C. Andersen

12

这个文件也可以列在.git/info/exclude中,还有一个选项core.excludesfile也要注意。


2
这个回答并没有真正解决问题,评论才是。 - Gerald
1
面掌瞬间:确保您的文件位于正确的目录中。我在另一台机器上使用闪存驱动器工作,并在回到主机时将文件夹放错了位置。手动查找.git文件夹让我明白了。 :/ - brichins

8
除了gitignore和其他需要检查的忽略模式之外,还要检查一下是否运行了git update-index --assume-unchangedgit update-index --skip-worktree。如果是,请将其取消设置。
确保仓库或关注文件的父级目录中没有任何奇怪的问题,例如它拥有自己的.git
尝试克隆您的仓库并查看克隆版本中是否有相同情况。如果是这样,请在不同的机器/虚拟机上进行克隆并检查。这将让您对出现了哪些问题有一些想法。

4
如何检查是否已运行这些命令? - Dave Schweisguth
1
运行git ls-files -v <file>命令。任何小写字母表示应用了--assume-unchanged; S表示应用了--skip-worktree, 而s 表示两者都应用了。尝试通过这些选项在代码库中进行搜索;我曾经处理过脚本运行--assume-unchanged以防止用户检查配置文件的更新,非常烦人。 - jjlin

4

我遇到了相同的问题(某种原因导致components/dashboard/js-dev/training/index.js没有被跟踪),所以我做了以下操作:

$ git check-ignore -v components/dashboard/js-dev/training/index.js
$ (gave me nothing)

$ git check-ignore -v components/dashboard/js-dev/training/
$ /Users/User/.config/git/ignore:23:    components/dashboard/js-dev/training/

无论如何,我发现这很奇怪,于是我查看了这个文件/Users/User/.config/git/ignore,它长这样:

(this is line 1)
# Automatically created by GitHub for Mac
# To make edits, delete these initial comments, or else your changes may be lost!

*.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

事实证明,第23行实际上是在.com.apple.timemachine.donotpresent# Directories potentially created on remote AFP share之间的那一行,换句话说,它是一行完全空白的行!

我尝试删除所有额外的换行符,使我的文件看起来像这样:

# Automatically created by GitHub for Mac
# To make edits, delete these initial comments, or else your changes may be lost!
*.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

我运行了git status,发现它现在正在检测components/dashboard/js-dev/training/。我运行git add components/dashboard/js-dev/training/,然后一切都正常了。
希望这能帮助到某些人——这个问题让我陷入了不必要的长时间困境中。

2

我曾遇到类似问题并已解决。

在运行git add命令时,我遇到了以下错误信息:

The following paths are ignored by one of your .gitignore files:
<file>
Use -f if you really want to add them. 
fatal: no files added

因此,我尝试通过在git add命令中添加-f来强制Git为我解决问题。这通常会强制Git调整.gitignore文件,然后您将能够看到所需的更改或有问题的设置。

在我的特定情况下,.gitignore文件末尾的换行符似乎存在一些奇怪的问题。以下是Git如何解决问题:

-RemoteSystemsTempFiles
+RemoteSystemsTempFiles
\ No newline at end of file

我尝试了这个方法,它基本上解决了我的问题,但是.gitignore文件没有改变。.gitignore文件末尾有一个空行,我想知道这是否是问题的原因? - Highly Irregular

1
这个问题的另一个原因可能是 .gitignore_global 文件。在我的情况下,它是由 Sourcetree 应用程序自动创建的,当我忽略文件时。它位于我的用户路径下 (/Users/user_name/.gitignore_global)。

1

额外说明,我遇到了这个问题,并发现对文件的更改没有被添加到提交中。除了右键单击项目并执行以下操作之外,似乎什么都不起作用:

团队 > 高级 > 不假设未更改


1
我也遇到了这个问题,看起来是Eclipse的EGit插件出了问题。像@user1655478在之前的评论中说的那样,选择项目视图中的项目,右键单击并选择“Team > Advanced > No assume unchanged”即可解决我的问题。

0
如果你的项目是Maven项目,请检查是否更改了源文件或目标文件。 这就是我最近所做的。 由于文件路径引用过长,我没有注意到路径中的“target”。经过1小时的煎熬后,一切都好了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接