【问题标题】:Git is not detecting a file and is not in .gitignoreGit 未检测到文件且不在 .gitignore 中
【发布时间】:2012-03-31 05:49:34
【问题描述】:

我有一个名为“style.css”的文件,但 git 没有检测到它。如果我删除它也不会检测到它,但它会检测我是否更改文件名。但我需要那个名字。 该文件不在 .gitignore 文件中。这快把我逼疯了!

我将不胜感激。

【问题讨论】:

  • Git 没有检测到您已经添加并提交的文件的更改?还是Git没有检测到文件存在除非改名?
  • 首先尝试“git add”。然后检查 git 状态。如果这不起作用,请导航到该文件目录并尝试“git add style.css”并执行另一个 git status... 我认为这会起作用
  • 该文件已被添加并在过去提交。但是现在没有检测到更改,即使我删除了 de 文件
  • 你检查过其他一些 gitignore 的地方吗? stackoverflow.com/questions/9436405/…
  • "git add ."并且“git add style.css”不起作用,这是我尝试的第一件事

标签: git


【解决方案1】:

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

例如:

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

关于每个给定路径名(包括行)的匹配模式(如果有)的上述输出详细信息。

所以也许你的文件扩展名没有被忽略,而是整个目录。

返回格式为:

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

或使用以下命令在用户和 repo 文件夹中打印您的 .gitignore

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

或者使用git add -f &lt;path/file&gt;,它允许添加其他被忽略的文件。

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

【讨论】:

  • git add -f 。在不克隆存储库的情况下为我修复了它。
  • 这应该是公认的答案,因为它显示了问题的实际所在。
  • 这为我解决了问题。我有一个完整的文件夹,在任何地方都没有显示任何错误或不合适的地方。在其中一个文件上运行 git add -f 使一切恢复生机。有时,它的随机数确实让 GIT 感到沮丧。谢谢!
  • 谢谢。正如我所怀疑的那样,路径被设置为子模块。但它不在配置中的任何位置,也可以使用submodule deinit 删除。幸运的是我刚刚创建了 repo,所以我只是删除了 .git 文件夹并重新启动了 git。
  • git add -f %relativepath% 。例如:git add -f folder\file.xml 更明确
【解决方案2】:

另一个注意事项,可能是罕见的情况,但我遇到了这个问题。我将一些已经绑定到存储库的文件从一个目录移动到另一个目录,复制/粘贴样式。

随之而来的是 .git 文件夹,它阻止了 git 检测到该文件夹​​。

所以我的文件夹结构是这样的,即使为原始项目 1 设置了 repo,git 也没有检测到文件夹 2:

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

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

【讨论】:

  • 感谢您的提示!
【解决方案3】:

该文件也可以在.git/info/exclude 中列出,还有core.excludesfile 选项可供观看。

【讨论】:

  • 这个答案并没有真正解决问题。评论确实如此。
  • Facepalm 时刻:确保您的文件位于正确的目录中。当我回到我的主机时,正在另一台机器上使用闪存驱动器并将文件夹放在错误的位置。手动挖掘 .git 文件夹让我知道了。:/
【解决方案4】:

除了 gitignore 和其他地方检查忽略模式,检查你是否运行过 git update-index --assume-unchangedgit update-index --skip-worktree。如果是这样,请取消设置。

确保所关注文件的 repo 或父文件中没有任何奇怪之处,即它有自己的 .git

尝试克隆您的存储库,看看您是否在克隆的存储库中看到相同的内容。如果是这样,请尝试克隆到另一台机器/VM 上并检查。这会让你知道哪里出了问题。

【讨论】:

  • 如何检查是否已经运行了这些命令中的任何一个?
  • 运行git ls-files -v &lt;file&gt;。任何小写字母表示--assume-unchanged 被应用; S 表示 --skip-worktree 已应用,s 表示两者均已应用。尝试搜索这些选项的代码库;我已经使用运行 --assume-unchanged 的脚本处理 repos,以防止人们检查配置文件的更新——这很烦人。
【解决方案5】:

我遇到了同样的问题(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/,一切正常。

希望这对某人有所帮助 - 这个问题让我陷入了不必要的长时间。

【讨论】:

    【解决方案6】:

    我遇到了类似的问题并解决了。

    我在运行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 末尾有一个空行;不知道是不是这个问题?
    【解决方案7】:

    额外说明,我遇到了这个问题,发现对文件的更改没有被添加到提交中。除了右键单击该项目并执行以下操作外,似乎没有任何效果:

    团队 > 高级 > 没有假设不变

    【讨论】:

      【解决方案8】:

      我也遇到了这个问题,这似乎是 Eclipse 的 EGit 插件的问题。就像@user1655478 在之前的评论中所说,在项目视图中选择项目,执行右键单击并选择“团队 > 高级 > 没有假设不变”为我解决了这个问题。

      【讨论】:

        【解决方案9】:

        这个问题的另一个原因可能是.gitignore_global 文件。 就我而言,它是由Sourcetree app 在我忽略文件时自动生成的。它在我的用户路径中(/Users/user_name/.gitignore_global)。

        【讨论】:

          【解决方案10】:

          如果你的项目是 maven 项目,请检查是否更改了 src 文件或目标文件。这就是我最近所做的。由于文件路径引用太长,我没有注意到路径中的“目标”。痛苦了 1 小时后一切都好。

          【讨论】:

            【解决方案11】:

            我遇到了另一个原因。可能是非常罕见的情况。

            我将整个存储库复制到另一个文件夹以进行处理。 git 没有检测到我对子模块所做的更改。结果发现子模块文件夹中的 .git 文件包含对原始副本的绝对文件引用。一旦我更正文件引用以指向我的工作副本,一切都很好。

            【讨论】:

              【解决方案12】:

              有些人出于某些原因想添加一个空文件夹 如果文件夹的内容是空的,那么git就没有理由提了。

              约定说您可能要向其中添加文件.keep。也可以是任何其他文件。

              see 此处或here

              【讨论】:

                【解决方案13】:

                当我在我刚刚创建的名为“am”的分支上工作时,这发生在我身上。我上了另一个开发站,看不到我添加到分支的文件。为了查看文件,我运行了以下命令

                git checkout am
                git branch --set-upstream-to=origin/am
                git pull
                

                在拉取所有更改后

                【讨论】:

                  【解决方案14】:

                  首先检查您的 git 存储库以确保该文件不存在,有时大写字母可能会混淆文件被识别但不会被识别为更改,尤其是在 .JPG 等文件扩展名中

                  (由于某种原因,这发生在我身上,尽管该文件与其他文件保存相同,但扩展名仅大写一个并且不会出现在网站上)

                  '如果'这是问题检查相关文件夹中的'显示文件扩展名',将文件重命名为具有小写扩展名的其他内容,git add 并提交,然后按最初想要的方式重命名,但保留小写扩展名,因为更明显的变化将被重写而不是忽略

                  【讨论】:

                    【解决方案15】:

                    在我的情况下,我检查了我的 .gitignore_global,我发现我所有的 swift 文件都被忽略了,我刚刚删除了 *.swift 行,git 识别了我的文件。

                    【讨论】:

                      【解决方案16】:

                      退出 GitHub 应用对我有用。

                      症状: 我的仓库在谷歌文件流上。运行 git status 时我只能看到修改后的文件,但 GitHub 应用程序显示了所有更改。

                      【讨论】:

                        猜你喜欢
                        • 2012-03-15
                        • 2015-01-06
                        • 2015-04-17
                        • 1970-01-01
                        • 2016-03-05
                        • 1970-01-01
                        • 2019-10-30
                        • 2023-01-26
                        • 2020-08-01
                        相关资源
                        最近更新 更多