行。所以我以为我有这个舔...但现在....
我有一个项目,其中包含一个来自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
任何人都知道缺少什么?
答案 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个目录并重新获取子模块来解决:
external_libraries/BEACHhtml
并查看.git
文件。它的内容应该是gitdir: ../../.git/modules/external_libraries/BEACHhtml
external_libraries/BEACHhtml
和.git/modules/external_libraries/BEACHhtml
目录。从现在起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客户端即可。为我工作。