“git add <file_name>”命令导致错误“致命:pathspec'file_name'没有匹配任何文件

Posted

技术标签:

【中文标题】“git add <file_name>”命令导致错误“致命:pathspec\'file_name\'没有匹配任何文件【英文标题】:the "git add <file_name>" command leads to the error "fatal: pathspec 'file_name' did not match any files“git add <file_name>”命令导致错误“致命:pathspec'file_name'没有匹配任何文件 【发布时间】:2021-08-01 07:53:11 【问题描述】:

在您标记为重复之前,我引用了这个类似的问题:Fatal: pathspec 'file.txt' did not match any files, GIT

但是我的问题似乎与那里发布的问题略有不同。

我是 Git 和 GitHub 的初学者。我已经编写了一个完整的程序,并按照说明将其上传/提交到我的 GitHub 页面。它似乎没有任何问题。

后来,作为进一步的练习,我编辑了包含我的程序源代码的文件。我要做的就是将这个新编辑的程序版本上传/提交到我的 GitHub 页面。但是,当我尝试输入命令时:

git add <file_name> 

我收到以下消息:

fatal: pathspec 'file_name' did not match any files

我认为这可能是语法问题,所以我尝试了带有和不带有文件扩展名“.txt”的“git add ”命令我还尝试了使用“/”而不是文件扩展名的添加命令因为这就是使用“git status”命令时它在 Git Bash 中的显示方式。没有任何效果。

然后我注意到,当我使用“dir”命令时,文件名使用不同的语法表示。似乎由空格分隔的多个单词组成的文件名用反斜杠后跟一个空格表示并且没有文件扩展名,所以我的文件:“Word Guess.txt”变成了“Word\ Guess”,考虑到这一点我尝试了“ git add" 命令使用这种不同的文件名表示,我写道:

git add Word\ Guess

这给了我以下警告:

我不完全理解警告的意思,但它显然不是我想要的结果。显然我在这里遗漏了一些东西。在对我在这篇文章顶部引用的类似问题的回复中,评论者说问题的根源是该文件不存在,并且您无法在创建文件之前添加文件,但在我的情况下似乎很明显该文件存在,因为该程序功能齐全并且已经成功上传到我的 GitHub 页面。我没有掌握什么?

*编辑我现在变得更加困惑。在最后一个屏幕截图中,警告消息说:

if you added this path by mistake, you can remove it from the index with:
    git rm --cached Word Guess/bin

但是,在输入与 Git Bash 警告中显示的完全一致的命令后:

git rm --cached Word Guess/bin

我遇到了和以前一样的错误

fatal: pathspec 'Word' did not match any files

然后我尝试使用替代名称表示

git rm --cached Word\ Guess/bin

这给了我以下错误:

error: the following file has staged content different from both the file and the HEAD: 
Word Guess/bin
(use -f to force removal)

请看下面的屏幕截图:

我现在完全不知道如何继续操作,并且对我似乎无法撤消错误的命令感到沮丧。

【问题讨论】:

你问题的前半部分是无关紧要的顺便说一句。你发现你需要逃避空白。 Word Guess 的 bin 文件夹中有什么? @JBallin 在 bin 文件夹内如下:“.git”文件夹、“README.md”文件、“WordGuess.class”文件和一个名为“.[A.[C”的奇怪文件.[B" 我不知道最后一个文件是什么,而且这些点不是正常的句点,它们更高,几乎就像一个'*'字符 ∙[A∙[C∙[B 文件可能是把箭头键或类似的东西变成文件名的结果。 【参考方案1】:

您的 Word Guess 目录(文件夹,如果您愿意)包含一个 Git 存储库。 Git 存储库不能包含另一个 Git 存储库,因此“外部”Git 拒绝添加整个内部存储库。它确实添加了something,但它添加的不是Git 存储库:它添加了一个子模块,它是一个 的引用另一个 Git 存储库。

这使得外部 Git 充当所谓的超级项目。当克隆一个超级项目时,该超级项目包含对其他 Git 项目的引用,git submodule initgit submodule update --init 知道阅读“我从哪里克隆另一个 Git 项目”的说明并克隆它。稍后的git checkout --recursivegit submodule update --checkout 使用所存储的关于要在子模块中签出哪个commit 的信息。

要正确添加子模块,您需要使用git submodule add,而不是git add。您使用git add更新 子模块链接,但只有 git submodule add 正确添加子模块。如果您最初使用git add 添加子模块,您会得到我有时称之为“半途而废”的子模块:缺少关于在超级项目的其他克隆中,Git 应该克隆子模块的位置的说明 来自。如果没有这些信息,超级项目的新克隆知道它需要提交某个其他 Git 存储库的 a123456(或其他),但不知道应该从哪里克隆其他 Git 存储库来自。 (除非您打算自己手动克隆子模块,否则这不是很有用,这就是我称之为“半途而废”的原因。)

在 Git 1.5、1.6 和早期 1.7 的糟糕旧时代,人们习惯将子模块称为 sob-modules,因为工具太糟糕了,让人哭笑不得。 ? 它仍然......不是那么好,我认为有些人仍然使用这个短语。如果您确实想要一个子模块,请确定您想要一个子模块。

【讨论】:

感谢您的澄清。我绝对不打算创建子模块,这是否意味着我在尝试添加命令时位于错误的根目录中。包含我的项目的目录路径是:C:\Users\Gabe\OneDrive\Documents\School\GitHub projects\Word 猜猜我以为包含我的本地存储库的目录路径是:C:\Users\Gabe\OneDrive\Documents\ School\GitHub 项目 我在 git bash 中执行命令,比 Word Guess 文件夹高一级,对吗? 我该如何撤消这个,当我按照 git bash 上的说明执行“git rm”命令时,它似乎只会使问题更加复杂,正如我在上一个屏幕截图中看到的那样 不一定是错误。正是 Git 的设计方式给了您这样的限制:您不能尝试将 Git 存储库放入 Git 存储库——不要将 Git 存储库用作另一个 Git 存储库的子目录——否则接受子模块性。要删除半途而废的子模块,请使用git rm,但和以前一样,引用空格,因为您的特定命令行解释器是 Linux/Unix 式的,它认为空格不是文件名的一部分。 为避免尝试将 Git 存储库放入另一个 Git 存储库,当您在外部存储库中工作时,请勿在其工作树中克隆或创建任何新的 Git 存储库。如果您有一些其他 Git 存储库,并且有一些特定的提交,您想从中获取它的 文件,请在其他地方克隆该其他 Git 存储库,然后 复制工作树文件进入第一个 Git 存储库的工作树。 (如果没有每个人的名字,这会很混乱。就像在布鲁斯大学,每个人都被命名为布鲁斯。公共汽车也被称为布鲁斯。)

以上是关于“git add <file_name>”命令导致错误“致命:pathspec'file_name'没有匹配任何文件的主要内容,如果未能解决你的问题,请参考以下文章