【问题标题】:Git is ignoring files that aren't in gitignoreGit 忽略不在 gitignore 中的文件
【发布时间】:2012-03-15 05:41:13
【问题描述】:

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

您的 .gitignore 文件之一会忽略以下路径。

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

【问题讨论】:

标签: git gitignore


【解决方案1】:

可能不是.gitignore:skip-worktreeassume-unchanged

文件可能会因为以下原因而被忽略:

  1. .gitignore(全部组合)
  2. git update-index --skip-worktree
  3. git update-index --assume-unchanged

此外,如果文件在.gitignore 中并且已经在索引/缓存中暂存,则该文件可能会被 UNignored by。

检查上面列举的情况:

  1. 对于.gitignore排除的两种情况,比较输出:

    • git check-ignore --verbose --non-matching --no-index file1 file2 file3
    • git check-ignore --verbose --non-matching file1 file2 file3
  2. git ls-files file1 file2 file3 | grep -E '^S'

  3. git ls-files file1 file2 file3 | grep -E '^[[:lower:]]'

太难了,给我一个别名!

以下别名将涵盖上面列出的所有情况:

ignore = !"bash -c 'diff --unified=999999999 --color=always <(echo a; git check-ignore --verbose --non-matching --no-index . \"$@\") <(echo b; git check-ignore --verbose --non-matching . \"$@\")' - \"$@\" | tail -n+7; git hidden \"$@\" # Show ignore status of arguments. Files included by index are tagged with prepended '+'."
hidden = !"git ls-files -v -- \"$@\"| grep -E '^(S|[[:lower:]])' # S means update-index --skip-worktree, and lower first letter means --assume-unchanged."

注释和结尾" 是要复制到您的.gitconfig 的行的一部分。

用法:

git ignore file1 file2 file3

【讨论】:

    【解决方案2】:

    git check-ignore

    使用git check-ignore command 调试您的 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,它允许添加其他被忽略的文件。

    有关详细信息,请参阅:man gitignoreman git-check-ignore

    语法

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

    git check-ignore [选项] --stdin

    【讨论】:

    • 这比公认的答案要好得多。没有冒犯那个人,但这挽救了我的一天。谢谢kenorb。
    • 值得更多点赞。发现某些 /vendor/ 文件夹中的一些奇怪的 gitignore 导致最新 git 版本出现问题。
    • 这个今天救了我...似乎 Visual Studio 在用户文件夹中创建了一个名为 gitignore_global.txt 的文件,而这忽略了我无法(取消)忽略的文件
    • 完美解决了我的问题。有些图案不是很容易用眼睛捕捉到的!!
    • 您的回答对我帮助很大。从现在开始,我将在我的 gitignore 文件顶部添加两个 cmets:# Git is ignoring files that aren't in gitignore,后跟此答案的 URL。
    【解决方案3】:

    看看这些:

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

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

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

    【讨论】:

    • 存储库中没有其他 .gitignore 文件,.git/config 文件中也没有任何忽略任何内容的文件。 .git/info/exclude 是如何配置的?
    • 不清楚为什么这个答案被标记为已回答。这个问题究竟是如何解决的?
    • 排除是我的问题。我知道还有另一种方法可以忽略,我过去使用过,但忘记了它在哪里!
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      对我来说,我的 ~/.gitignore_global 文件中不小心有一个通配符。可以去那里看看吗?

      【讨论】:

      • 这正是我的问题。我在那里有 *.png,不知道它是如何到达那里的。
      【解决方案6】:

      在我的情况下,是我路径中的正斜杠导致了问题...

      不工作

      /srv/bootstrap/
      

      工作

      srv/bootstrap/
      

      【讨论】:

        【解决方案7】:

        确保.gitignore 文件没有忽略自身。 一个常见的错误是将* 规则添加到.gitignore 文件以忽略当前文件夹中的每个文件。 解决这个问题的方法是给.gitignore添加一个异常:

        *
        !.gitignore
        

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              从 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 版本中修复。)

              【讨论】:

              • 谢谢,原来是我遇到的问题。救生员!
              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

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

                git config core.excludesfile
                

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

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

                【讨论】:

                • 这确实是我的问题。不确定如何或何时编辑此文件,但其中列出了我想要的文件
                • 谢谢你,你救了我几个小时的纯粹痛苦。在我的例子中,它是源代码树(一个可视化 git repo 的工具)的安装,它在文档文件夹下不合逻辑地创建了一个 gitignore_global.txt,其中包含大量排除项。
                • 我有同样该死的Icon? 被忽略。
                • 这就是我的情况。在全局忽略文件中有很多规则。感谢您的提示 +1
                • 我的全局忽略中有 *.json - 谈论一场噩梦 - 谢谢!
                【解决方案13】:

                我遇到了同样的问题 - 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 又开始跟踪我的目录了。

                【讨论】:

                • +1 让我查找部分匹配项... gitignore_global.txt 包含“[Rr]elease*/”,这导致我的“releasenotes”目录被忽略。
                • 更难的是,git 将只忽略新添加的文件,而不是已经在 repo 中的文件。因此,当我将“foo/”添加到我的 .gitignore 时,它​​只会忽略 foo 子目录中最近添加的文件,而不是所有文件。我花了一个小时才弄清楚为什么有些文件被忽略而其他文件没有。
                • 我也有同样的问题。 SourceTree 在工具菜单-> 选项项-> Git 选项卡中设置~/.gitignore_global 文件。在我清理了字段 Global Ignore list “git add...” 命令后工作。
                • 我遇到了同样的问题。我有 help 被忽略的目录。幸运的是,我很快就找到了你的答案。
                【解决方案14】:

                我遇到了和你一样的问题。你得到的唯一回复列出了几个要检查的地方,但没有一个能为我解决问题,而且从你的评论中我也不认为你适合。我没有其他 .gitignore 文件隐藏在目录树的下方; .git/config 中没有任何内容; .git/ingore/exclude 中没有任何内容

                如果仍有问题,请查看this answer。它为我解决了这个问题

                基本上,检查 ~/.gitignore 文件。我的被​​称为 ~/.gitignore_global。我不知道它是什么时候创建的(肯定没有成功),但是我在第一次安装时尝试了很多不同的 git setup,所以其中一个肯定是把它放在那里的。

                希望他的回答也能帮助到你!

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-14
                  • 2011-03-18
                  • 2013-07-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-02-20
                  相关资源
                  最近更新 更多