34

不知何故,git 意识到我有一个未跟踪的文件(一个在我的存储库中已经存在很长一段时间的目录,大约 17 个月)。无论如何,我似乎无法说服 git 这不是一个未跟踪的文件。此外,我无法重新添加有问题的文件。知道如何解决这个问题吗?

例子:

➜ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   rosetta_tests/profile/tests/docking/
nothing added to commit but untracked files present (use "git add" to track)

我尝试添加目录并重新检查状态。

➜ git add rosetta_tests/profile/tests/docking/
➜ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   rosetta_tests/profile/tests/docking/
nothing added to commit but untracked files present (use "git add" to track)

只是为了确定(从我的源代码树的根目录)

➜ git add .
➜ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   rosetta_tests/profile/tests/docking/
nothing added to commit but untracked files present (use "git add" to track)

这里发生了什么?如何说服 git 自行修复?

编辑

更多细节:

- 文件不在 .gitignore 中

- 有问题的文件夹中有三个跟踪文件,所以它不是空的

- 经过更多的挖掘,似乎这样的事情可能是由于更改了跟踪文件夹的大小写引起的。不幸的是,情况并非如此(双关语!)。文件夹名称从未改变大小写。

- 对接目录的内容:

➜ ls -lA rosetta_tests/profile/tests/docking/.
total 16
-rw-r--r--  1 tim  staff  2209 Jul 17 10:47 command
-rw-r--r--  1 tim  staff   260 Jul 17 10:47 flags
drwxr-xr-x  3 tim  staff   102 Jul 17 10:47 input
4

8 回答 8

23

这 。在git add .命令中指的是“当前目录”。因此,运行git add .将添加当前目录及其子目录中的所有文件。在运行之前,您应该确保您位于正确的目录中git add

git add -A是你想要的。它会添加一切。

于 2012-07-17T15:05:42.070 回答
22

我通过运行解决了这个问题

git clean -f
于 2015-06-10T19:35:45.920 回答
5

我遇到了同样的错误:没有大小写更改,没有 .ignore 问题,并且该目录确实包含我绝对想要保留的文件。添加目录、提交git add -A和其他补救措施没有任何效果。

我最终用“git clean”删除了目录,然后再次检查了目录中的文件。

这是我所做的:

rex@sidekick> git status
# On branch master
# Your branch is ahead of 'origin/master' by 10 commits.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   app/models/xSpecific/
nothing added to commit but untracked files present (use "git add" to track)

此时我制作了“xSpecific”目录的备份副本以防万一。然后我用 'git clean' 进行了空运行(-n 选项表示“空运行”,-d 使干净的删除目录):

rex@sidekick> git clean -n -d
Would remove app/models/xSpecific/

经过双重和三重检查后,我继续进行清理(-f 标志表示“强制”,需要说服 Git 你是认真的。非常好的设计,如果你问我):

rex@sidekick> git clean -d -f
Removing app/models/xSpecific/

rex@sidekick> git status
# On branch master
# Your branch is ahead of 'origin/master' by 10 commits.
#
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    app/models/xSpecific/GetAddressesLog.java
#   deleted:    app/models/xSpecific/GetProductLog.java
#
no changes added to commit (use "git add" and/or "git commit -a")

到目前为止,一切都很好。该目录不再列出,但文件当然也消失了。我本可以从我的备份中恢复它们,但这就是 Git 的用途:

rex@sidekick> git checkout -- app/models/xSpecific/GetAddressesLog.java
rex@sidekick> git checkout -- app/models/xSpecific/GetProductLog.java

rex@sidekick> git status
# On branch master
# Your branch is ahead of 'origin/master' by 10 commits.
#
nothing to commit (working directory clean)

是时候庆祝了!实际上,克隆存储库的新副本并改用它可能会更容易,但是通过艰难的方式我学到了一些新东西:)。

于 2013-02-28T08:40:48.060 回答
2

这为我解决了问题rm .git/fs_cache

于 2015-04-01T23:20:26.937 回答
2

我遇到了同样的问题,我解决了

git clean -f -n
于 2016-09-29T10:02:10.843 回答
1

我有重要的未跟踪文件,不能git clean -f像一些答案建议的那样运行。

我尝试添加目录并重新检查状态。

➜ git add rosetta_tests/profile/tests/docking/

而且似乎添加整个目录不会触发文件重新检查。

因此,我尝试专门添加一个所谓的未跟踪文件,并且它起作用了:

$ git status
On branch foo
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        important.txt
        foo/foo.java
        foo/bar.java
        foo/baz.java
        foo/qux.java

nothing added to commit but untracked files present (use "git add" to track)

$ git add -- foo/foo.java
fatal: pathspec 'foo/foo.java' did not match any files

$ git status
On branch foo
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        important.txt

nothing added to commit but untracked files present (use "git add" to track)
于 2018-07-30T17:53:51.753 回答
0

重新创建文件或目录

mkdir -p rosetta_tests/profile/tests/docking/

然后再次删除它。

rm -rf rosetta_tests/profile/tests/docking/
于 2020-06-26T05:20:13.573 回答
0

git add由于子目录中的文件名太长而失败时,我会弹出此错误。(在我的情况下,node_modules 中有一些东西)

在这种情况下,将 .gitignore 文件*添加到 node_modules 文件夹允许 git add 运行完成。

因此,请注意git add .(或 -A 或 --all)的命令输出,并确保它不会因错误而过早停止。一旦应用了正确的 .gitignore 并且我能够提交并推送我的更改,我的所有“未跟踪”文件和文件夹都已成功添加。

于 2019-01-10T16:58:08.563 回答