176

无法删除真正存在的文件 - 致命:pathspec ...不匹配任何文件

我有一个在 git 控制下的文件,根本不会被删除。失败的命令是:

$ git rm .idea/workspace.xml
fatal: pathspec '.idea/workspace.xml' did not match any files

下面我列出了目录内容、分支等。到目前为止,我已经从目录中尝试了 rm,并转义以防万一有有趣的字符,我真的很难过。我搜索了网络和 SO,但找不到具体的。

$ git branch -a
* dot-output
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/modelspace
$ 

$ git status
# On branch dot-output
# Untracked files:
# ...

$ ls .idea/
ant.xml         encodings.xml       modules.xml     workspace.xml
compiler.xml        inspectionProfiles  scopes
copyright       libraries       testrunner.xml
dictionaries        misc.xml        vcs.xml

$ ls -al
total 56
drwxr-xr-x  16 matt  staff    544 Apr 10 11:33 .
drwxr-xr-x@ 33 matt  staff   1122 Apr 10 09:40 ..
-rw-r--r--@  1 matt  staff  12292 Apr 10 11:19 .DS_Store
drwxr-xr-x  18 matt  staff    612 Apr 10 11:39 .git
-rw-r--r--   1 matt  staff     98 Mar  6 13:40 .gitignore
drwxr-xr-x  16 matt  staff    544 Apr 10 11:34 .idea
-rw-r--r--   1 matt  staff   1113 Feb 25 11:07 README
...

$ head -n 2 .idea/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">

$ git rm .idea/workspace.xml
fatal: pathspec '.idea/workspace.xml' did not match any files

更新

@Nevik 和 @Boris 的回答很有帮助。我意识到我对正在发生的许多事情感到困惑,其中一些被 IntelliJ IDEA(我通常喜欢的工具,顺便说一句)加剧了。首先,来自的“致命:pathspec”消息既无用git rm又具有误导性。

其次,我有该文件.gitignore,但在问我的问题之前已将其删除。但是,它也独立于 git 包含在 IDEA 的 Ignored Files 功能中,并在项目查看器中显示(而不是未跟踪,如 git status 所示)。最后,我在试验时运行了 IDEA,看起来它在我的rm.

我的收获是,如果我对 Git 行为感到困惑,请确保退出 IDEA 并在调试时仅在命令行(和 gitk)中工作。

4

9 回答 9

139

您的文件.idea/workspace.xml不受 git 版本控制。您尚未添加它(检查 git status/Untracked 文件)或忽略它(使用 .gitignore 或 .git/info/exclude 文件)

您可以使用以下 git 命令验证它,该命令列出了所有被忽略的文件:

git ls-files --others -i --exclude-standard
于 2013-04-10T16:35:36.920 回答
24
$>git add .
$>git rm file_Name  

有用。您使用右键单击添加新文件-> 创建新文件,然后立即将其删除。该文件将进入未跟踪的文件列表。

于 2016-02-24T07:48:08.070 回答
10

我知道这不是 OP 的问题,但是我在完全不同的基础上遇到了同样的错误,所以我只是想把它放在这里,以防其他人也有同样的错误。这是特定于 Windows 的,我认为不会影响 Linux 用户。

我有一个 LibreOffice doc 文件,称之为final report.odt. 我后来将它的大小写更改为Final Report.odt. 在 Windows 中,这甚至不算作重命名。final report.odt, Final Report.odt,FiNaL RePoRt.oDt都是一样的。在 Linux 中,这些都是不同的。

当我最终去git rm "Final Report.odt"并得到“pathspec不匹配任何文件”错误时。只有当我在添加文件时使用原始外壳时 git rm "final report.odt"——它才起作用。

经验教训:为了改变情况,我应该这样做:

git mv "final report.odt" temp.odt
git mv temp.odt "Final Report.odt"

同样,这不是这里的 OP 的问题。并且不会影响 Linux 用户,正如他的帖子所表明的那样。我只是为其他可能在 Windows git 中遇到此问题并偶然发现此问题的人提供了它。

于 2018-08-01T00:25:35.537 回答
3

如果您的文件idea/workspace.xml 被添加到 .gitignore (或其父文件夹),只需add手动将其添加到 git 版本控制。你也可以使用 TortoiseGit 添加它。下一次推送后,您将看到,您的问题已解决。

使用 TortoiseGit 添加到 git 版本控制

于 2015-06-13T20:05:05.763 回答
2

这些步骤帮助了我:

  1. 混帐添加。
  2. 混帐藏匿
于 2020-04-02T07:02:07.230 回答
0

在我的例子中,有一些完全奇怪的事情,我不确定原因是什么。之前提交了整个文件夹。我可以在 Git、Windows 资源管理器和 GitHub 中看到它,但是我对文件夹本身和其中的文件所做的任何更改都被忽略了。使用git check-ignore查看忽略它的内容,并尝试使用删除它git rm --cached没有任何影响。更改无法上演。

我通过以下方式修复了它:

  1. 在另一个位置复制文件夹和文件。
  2. 我删除了以某种方式被忽略的原件。
  3. 提交并推送此更新。
  4. 最后,我重新添加了文件和文件夹,git 再次按预期看到并对其做出反应。
  5. 阶段并提交此操作,您就可以开始了!:)
于 2018-07-27T15:16:06.173 回答
0

在这种情况下,我个人偶然发现了类似的错误消息:

我创建了一个一直为的文件夹,所以自然只要是空的,打字git add *就不会考虑这个空文件夹。因此,当我尝试运行git rm -r *或简单地运行 git时rm my_empty_folder/ -r,,我收到了该错误消息。

解决方案是在没有 git: 的情况下简单地删除它,rm -r my_empty_folder/ 或者在这个文件夹中创建一个数据文件,然后添加它(git add my_no_long_empty_folder

于 2018-10-18T14:43:31.097 回答
0

对我有用的是运行:

  1. git add .idea/workspace.xml
  2. git rm -r --cached .idea/*
于 2021-12-03T05:47:17.937 回答
-6

暂时将 .gitignore 移动到 .gitignore.bck

于 2015-02-10T15:07:11.057 回答