我得到了这个场景:
我创建了一个Git存储库。
$ git init
克隆子目录中的外部存储库。 (在我的例子中使用git-hg)
$ git hg clone lib remote_uri
将克隆的库添加为子模块
$ git submodule add lib ./lib
然后我提交了更改
$ git commit -am“添加了lib”
在此过程之后,如果我git clone
这个回购和git submodule init/update
新回购,我会得到回购和lib。
无论如何,如果我试图将repo推到一个裸机,并从裸机克隆到另一个地方,新的崩溃尝试获取lib。
我试图在裸露的git submodule init
,但如果你没有工作副本,命令就不起作用。
有人知道可以做些什么吗?
**更新** 这是一个没有hg的例子。
This is a way to reproduce it.
/tmp$ git clone https://github.com/gitster/git.git
/tmp$ cd git/
/tmp/git [master]$ git clone https://github.com/gitster/git.git gitrepo
/tmp/git [master]$ git submodule add ./gitrepo
/tmp/git [master]$ git commit -am "added repo"
/tmp$ cd ..
/tmp$ git clone --bare git gitbare
/tmp$ git clone gitbare gittest
/tmp$ cd gittest/
/tmp/gittest [master]$ git submodule init
Submodule 'gitrepo' (/tmp/gitbare/gitrepo) registered for path 'gitrepo'
/tmp/gittest [master]$ git submodule update
fatal: repository '/tmp/gitbare/gitrepo' does not exist
Clone of '/tmp/gitbare/gitrepo' into submodule path 'gitrepo' failed
答案 0 :(得分:0)
将子模块的URL设置为指向子模块存储的位置。之后不要调用submodule init,因为它会将它重置为没有子模块的地方。
答案 1 :(得分:0)
你好像在期待不可能的事。子模块本身就是存储库,为了能够从任何地方克隆它们,必须有一个可访问的存储库,就像父存储库一样。您添加了一个没有公共URL配置的子模块。 Git无法从你原始存储库中的版本中神奇地获取它。
您需要将子模块的URL更新为可以从您想要克隆它的任何位置访问的内容。您应该以与父存储库相同的方式托管它,无论是在单个计算机上,在单个网络上还是在GitHub上。
顺便说一句,您的复制说明与您的实际使用情况不同。在您发布的玩具箱中,您所要做的就是使用公共URL正确添加子模块:
git submodule add https://github.com/gitster/git.git gitrepo
一切都会好起来的。如果您以类似的方式托管您尝试添加为子模块的东西,那么此命令的相应版本将适合您。