Git子模块。进入超级项目的新克隆


87

好。所以我以为我舔过了……但是现在……。

我有一个项目,其中包括一个来自GitHub的小型图书馆作为子模块。在该超级项目的原始版本中,子模块按预期工作。

但是,我只是克隆了超级项目,做了我认为应该做的事情:“ git submodule init”,让子模块的目录出现了,但是它是空的。

如果我现在尝试做

git submodule update

我懂了

fatal: Needed a single revision 
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'

如果我尝试

git submodule foreach git pull

我懂了

Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.

在我的.git / config中,我有这个:

[submodule "external_libraries/BEACHhtml"]
    url = git@github.com:interstar/BEACHhtml.git

在我的.gitmodules中,我有:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git

任何人都知道缺少什么吗?

Answers:


189

根据下面的评论,现在(在2019年)安装最新的GIT客户端似乎可以解决此问题。这应该是目前最好的解决方案。


我和你有同样的问题。这是git中的错误:http : //git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

简而言之,对于您的问题,请尝试:

# rm -rf external_libraries/BEACHhtml
# git submodule update

以前的checkout文件夹似乎出了点问题,将其删除,然后再次更新即可解决该问题。


1
对我来说,这是一个挂起的git-fetch,使文件夹保持锁定状态
Mihai Timar 2012年

31
我不得不删除这两个子模块worktree( ext/blah)及以下的配套文件夹GIT_DIR.git/modules/ext/blah)。
东武

2
在我的特殊情况下git submodule update,CI服务器一直在失败,因为它希望有人接受RSA密钥(CI服务器通常使用https连接,这是子模块第一次拉入ssh连接)。希望它可以节省一个小时的头部抓挠时间!
Maverik

8
在2016年,此错误仍然存​​在:(
Paulo Neves

6
2017年仍在办理入住手续。
william.taylor.09年

4

我遇到了这个问题(不稳定的网络,因此我像这样子模块掉线了),我通过制作此脚本(将其命名git-submodule-fixgit submodule-fix)来解决了该问题

#!/bin/bash 

for arg 
do 
  echo $arg 
  find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done

如果你得到这个,即从 git submodule update

fatal: Needed a single revision
Unable to find current revision in submodule path 'some/submodule/path'

git submodule-fix some/submodule/path
git submodule update

3

通过删除2个目录并重新获取子模块来解决:

  1. 转到external_libraries/BEACHhtml并查看.git文件。它的内容应该像gitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. 删除external_libraries/BEACHhtml.git/modules/external_libraries/BEACHhtml目录。

从现在开始git submodule update运行没有错误。


您可能需要先运行git submodule init才能git submodule update重新初始化子模块,然后才能运行。
Pellet

1

如果您在2019年或以后阅读,只需更新git客户端即可。为我工作。


0

使用差异工具比较正在工作的原始克隆和该克隆。另外,git submodule输出什么。在执行此操作之前,请确保您指向每个存储库中的相同分支。

我怀疑您已切换到未定义子模块的分支或较旧的修订版。

希望这可以帮助


0

我对项目中的子模块有相同的问题。当我尝试分别克隆子模块时,它运行良好。

我已经尝试了上面所有的答案,但是没有成功(git子模块更新,...,删除子模块文件夹,...)。

当时,将git(从Git-1.7.11-preview20120710)更新到最新版本(至Git-1.8.1.2-preview20130201)后,该问题消失了。奇怪的是,我的同事们甚至拥有更旧的版本,没有任何问题,但是他们使用的是Mac。我在Win7 64位上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.