【问题标题】:Cannot see new files added to my git working directory看不到添加到我的 git 工作目录的新文件
【发布时间】:2011-07-08 04:10:27
【问题描述】:

git 版本 1.7.4.1

我在 Ubuntu 上使用 git。

我已将一些文件从另一个目录复制到我的 git 工作目录。通常会出现在Untracked files 下。但是,它们没有出现。所以我不能添加它们。

当我执行git status 时,不会显示新文件。

我尝试通过git add source.c 添加它们,然后尝试git status。文件未显示。

所以我打开了文件并使用了同名的save as。 git status 还是看不到文件。

我已经完成了git ls-files 并且新文件显示正常。

我检查了文件权限,它们与我的 git 目录中的所有当前文件相同。

我从来没有遇到过这个问题。

非常感谢您的任何建议,

【问题讨论】:

  • 你的 git 忽略的内容是什么?哪些文件没有显示?
  • repo 中有忽略文件吗?
  • 你应该检查你的 git 忽略,也许升级到最新版本(1.7.6)
  • .gitignore 中没有任何内容。这些文件是 *.c 源文件。而且我有很多我正在为那个节目工作。
  • 你可以发布你的回购的完整树:cd your_repo && tree -a 吗? (如果你没有安装树:sudo apt-get install tree

标签: git


【解决方案1】:

如果git ls-files 显示source.c,那么它必须已经在索引中。这意味着它已经被跟踪,并且可能已经被提交。如果source.c 根本没有出现在git status 中,那么文件一定已经被提交了。

尝试修改文件以查看它是否在git status 中显示为已修改。要真正说服自己该文件已签入,请运行 git cat-file -p HEAD:source.c 以查看签入文件的内容(有关 HEAD:source.c 语法的文档,请参阅 git help revisions)。

此外,以下一项或多项可能为真:

  • 文件已被修改,但在索引中设置了“假定未更改”位。看看git ls-files -v source.c 的输出。如果第一列是小写字母,则设置“假设不变”位。这将防止任何更改出现在git status 中。您可以通过运行git update-index --no-assume-unchanged source.c 关闭“假设不变”位。
  • 文件已被修改,但在索引中设置了“skip-worktree”位。如果git ls-files -v source.c 输出的第一列是sS,则设置“skip-worktree”位。您可以通过运行 git update-index --no-skip-worktree source.c 来关闭“skip-worktree”位。
  • 您的索引已损坏。尝试删除.git/index(Git 会根据需要重新创建它)。
  • 文件系统问题导致stat() 无法正常工作。尝试运行git update-index --really-refresh。如果您的工作目录位于网络驱动器(NFS、sshfs 等)上,请尝试将您的存储库移动到本地驱动器。

【讨论】:

  • 我也有同样的问题。前两点不适用于我,因为第一列显示H。我删除了.git/indexgit status 现在显示跟踪的文件,但即使所有文件都存在,它们也都显示为已删除。我试过git update-index --really-refresh 无济于事。
  • 我使用了git reset,现在git status 又回到不显示我跟踪的文件——原来的问题。
  • @Fractal: 如果git status 没有显示文件,但git ls-files -v 显示H,那么文件已经提交并且在提交后没有被修改。这是正常的——git status 只显示与正常的偏差(未跟踪的文件、自暂存/提交后已修改的文件、已暂存但尚未提交的文件)。
  • @RichardHansen 我有类似的问题,它显示 H 并且如果我在提交更改后现在修改文件,它不会显示在状态中。知道为什么吗?
  • @blganesh101:您可能想提出一个新问题,因为我需要很多细节,例如:在您修改文件之前,git status 的输出是什么?修改文件后git ls-files -v <filename> 的输出是什么?你使用的是什么版本的 Git?什么操作系统?什么文件系统?删除.git/index 会改变什么吗? git update-index --really-refresh <filename> 有什么改变吗?
【解决方案2】:

很难从给出的信息中判断出什么问题,但是作为一种解决方法,您可以尝试git add -f filename.c。这将添加文件,即使它会被忽略。

【讨论】:

  • 这是正确的解决方案;我不知道为什么它不被接受。
  • 同意。上面的那个可能是想追根究底,但这又快又脏,而且有效
【解决方案3】:

这确实是在黑暗中戳,但我偶尔会遇到类似的问题,并且是以下情况之一:

  • 您在 .gitignore 中有一条忽略文件的规则
  • 您复制的目录之一中有一个 .git 目录

【讨论】:

  • .gitignore 中没有任何内容。这些文件是 *.c 源文件。而且我有很多我正在为那个节目工作。我只是复制了文件,没有别的。谢谢。
  • 请注意.git/info/excludecore.excludesfile 配置变量引用的文件也可以包含忽略规则。但是,我相信如果是忽略问题,Git 在运行git add 时会打印友好的“您的文件未添加,因为它被忽略”消息,这意味着它可能不是忽略问题。
  • +1 .gitignore 规则把我绊倒了。我将一个文件复制到构建目录中,因此它在构建时可以正常工作,但没有出现在状态中的任何位置。
  • 谢谢,这很有用!
  • 对我来说也是.gitignore。那么,您是否必须更新它未被忽略的分支的.gitignore?我现在就是这样解决的。
【解决方案4】:

我正在创建一个以 image.gen 结尾的包,它有一个以 image/gen 结尾的相应目录。还有一个 .gitignore 条目,它是特定于 Android gen/ 的。

这导致文件未添加到 git/ 以 git 状态显示。

检查下面,它帮助我解决了这个问题。


使用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,它允许添加其他被忽略的文件。

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

https://stackoverflow.com/a/28918909/4082503

【讨论】:

    【解决方案5】:

    .gitignore 文件很可能会忽略它。

    致电git status --ignored,看看您的文件是否出现。

    【讨论】:

      【解决方案6】:

      可能是第 3 方应用程序更新了您的“gitignore_global.txt”文件(Linux / OS X 上的~/.gitignore_global)。 它发生在我身上。我安装了“源树”并注意到 git 没有跟踪新文件。 它发现“源树”更改了“gitignore_global.txt”文件并添加了几个扩展名以不监视。 尝试找到这个文件,看看是否有不应该存在的文件扩展名

      【讨论】:

        【解决方案7】:

        我遇到了同样的问题。 Git 没有显示添加到我的项目中的任何新文件。

        我的问题是由以下原因引起的: 不知何故,我的项目的主文件夹被添加到“特定于存储库的忽略列表”中(这就是它在 SourceTree 中的名称)。 这是我项目主文件夹根目录中的“.gitignore”文件。

        在我删除“.gitignore”文件中的文件夹名称后它起作用了。

        【讨论】:

          【解决方案8】:

          Android 回购 - 我面临同样的问题 - 更正如下

          不知何故我添加了"/app" in .gitignore file。现在删除"/app" 后它起作用了。

          请检查您的 .gitignore。

          【讨论】:

            【解决方案9】:

            删除 .git/index 文件就可以了。当我将骨架模块克隆到我的 zf2 项目中时,我似乎遇到了一个非常令人沮丧的错误。

            【讨论】:

              【解决方案10】:

              git config --global status.showuntrackedfiles all - 旧案例的解决方案。可以在终端使用git status untracked-files=all,但是如果设置--global会比较长,上面的代码只需要git status用于文件出现在未跟踪的位置即可。

              【讨论】:

                猜你喜欢
                • 2015-03-15
                • 2019-02-04
                • 1970-01-01
                • 1970-01-01
                • 2019-10-16
                • 1970-01-01
                • 1970-01-01
                • 2018-04-14
                • 1970-01-01
                相关资源
                最近更新 更多