在子模块路径中找不到当前的origin/master修订版本。

66
在我的项目(使用git)中,我需要使用一款尚在开发中的。为了能够不时地更新最新版本(我不打算在那里做出自己的更改),我决定为该库创建一个子模块。
我做了以下操作:
git submodule add https://github.com/mb21/JSONedit.git
git commit -am 'added JSNedit submodule'
git push -u origin master
git pull origin master

然后,我在我的本地文件夹中看到了JSONedit文件夹,在我的git在线文件夹中也有一个链接。但是当我执行git submodule update --remote JSONedit/时,我遇到了以下错误:

fatal: Needed a single revision
Unable to find current origin/master revision in submodule path 'JSONedit'

有人知道这里出了什么问题吗?

8个回答

74

在主代码库中运行此命令即可:

git pull --recurse-submodules

根据其他讨论,特别是在那里的@Tobu在他的评论中指出的那样,如果错误仍然存在,可能需要首先:

删除子模块工作树(ext/blah)和 GIT_DIR 中匹配的文件夹(.git/modules/ext/blah


或者,在子模块内部使用git checkout到你想要拉取的分支,然后运行git pull

结果应该是相同的。


那么,如果我只在主存储库中执行 git pull origin master,它不会拉取子模块,对吧? - SoftTimur
2
我认为应该是 git submodule foreach --recursive git pull,否则会出现错误 fatal: Couldn't find remote ref master - SoftTimur
1
实际上,@SoftTimur,git pull --recurse-submodules 对你是否有效?这是更好的方法。 - tehp
它返回 获取子模块 JSONedit 已经是最新的。,看起来它工作正常... - SoftTimur

43
在我的情况下,问题在于 Git 子模块假设会有一个名为 origin/master 的分支。而子模块仓库中只有一个叫做 main 的分支。 我在 .gitmodules 中的子模块定义中添加了 branch=main。运行 git submodule sync 后,git submodule update --remote 现在可以正常工作。

这个解决方案对我有效。在Jenkins任务中的子模块克隆受配置限制。 - Sudheer Avula
1
这可能是目前(2022+)最常见的原因,原因是由于默认分支命名从origin/master更改为origin/main - jaimedash
我的问题是branch被设置为remotes/origin/master。将其更改为master解决了这个问题。 - PitaJ

19

我也遇到了同样的问题,但是问题已经解决了。子模块存储的文件夹存在,当我手动删除这个文件夹时,问题就得到了解决。


1
我在Jenkins流水线中也遇到了这个问题,并通过删除文件夹来解决它。 - Jeff Irwin

11

8
fatal: Needed a single revision
Unable to find current origin/master revision in submodule path
  • 我遇到了这种问题...
  • 我通过更新git版本来解决了它

3
令人惊讶的是,将版本从2.24.3升级到2.36.0真的解决了我的问题。 - Lucio Paiva

3

在我的情况下,错误日志如下:

无法在子模块路径“JSONedit”中找到当前的origin/HEADER修订版

这是因为我的多模块没有识别子模块的检出分支。我通过在.gitmodules文件中设置子模块分支来解决这个问题。

在多模块目录中进行操作。

git config -f .gitmodules submodule.{submodule name}.branch {branch name}
git config -f .gitmodules submodule.JSONedit.branch main

我认为你可能没有主分支,而是有一个主要分支。 通过命令“git branch”检查子模块目录中的分支。


1
在我的情况下,我已经删除并重新克隆了一个项目,但是由于 Git 子模块存储的提交在原始存储库中已不再存在。所以我做了以下操作:
$ rm -rf <submodule name>
$ git clone <submodule url>
$ cd <submodule name> 
$ git checkout <whatever commit/branch you wanted>
$ cd <main project>
$ git add <path/to/submodule>
$ git commit -m "fixed my submodule"
$ git push 

0
我在一个 Jenkins 构建中遇到了这个问题,其中一个子模块确实使用的是 origin/main 而不是 origin/master。我发现自己犯了一个错误,打开了选项 "将跟踪的子模块更新到分支的最新提交",这导致了错误。关闭该选项解决了这个问题。

Jenkins Advanced sub-modules behavior

在我的情况下,这个选项并不是我实际想要的,因为我在子模块中使用特定的提交 ID。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接