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

时间:2011-09-30 02:49:40

标签: git git-submodules

行。所以我以为我有这个舔...但现在....

我有一个项目,其中包含一个来自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

任何人都知道缺少什么?

6 个答案:

答案 0 :(得分:177)

我和你有同样的问题。这是git中的错误:http://lists-archives.com/git/785138-git-submodule-update-is-not-fail-safe.html

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

# rm -rf external_libraries/BEACHhtml
# git submodule update

以前的结帐文件夹似乎有问题,删除它,再次更新可以解决问题。

答案 1 :(得分:4)

我遇到了这个问题(片状网络,所以我放弃了这样的子模块结帐),我通过制作这个脚本(命名为git-submodule-fix来解决它,所以我可以将它作为git 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'

DO

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

答案 2 :(得分:3)

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

  1. 转到external_libraries/BEACHhtml并查看.git文件。它的内容应该是gitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. 删除external_libraries/BEACHhtml.git/modules/external_libraries/BEACHhtml目录。
  3. 从现在起git submodule update运行没有错误。

答案 3 :(得分:0)

使用diff工具比较正在运行的原始克隆和此克隆。此外,git submodule输出了什么。确保在执行之前指向每个仓库中的相同分支。

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

希望这会有所帮助

答案 4 :(得分:0)

我对项目的子模块有同样的问题。当我试图分别克隆子模块时,它运作良好。

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

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

答案 5 :(得分:0)

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