假设我递归地克隆一个存储库。
$ git clone --recursive ssh://server/project/client
Cloning into 'client'...
remote: Counting objects: 191, done
remote: Finding sources: 100% (191/191)
remote: Total 191 (delta 53), reused 159 (delta 53)
Receiving objects: 100% (191/191), 27.59 KiB | 0 bytes/s, done.
Resolving deltas: 100% (53/53), done.
Checking connectivity... done.
Submodule 'gui' (ssh://server/project/client/gui.git) registered for path 'gui'
Cloning into 'gui'...
remote: Counting objects: 3213, done
remote: Finding sources: 100% (3213/3213)
remote: Total 3213 (delta 1272), reused 3107 (delta 1272)
Receiving objects: 100% (3213/3213), 47.88 MiB | 12.05 MiB/s, done.
Resolving deltas: 100% (1272/1272), done.
Checking connectivity... done.
Submodule path 'gui': checked out '7315db8d7a8b36929f7874dc5477359839ec51ce'
现在我想创建该本地存储库的本地克隆(可能在本地进行并提交更改之后)。
$ git clone --recursive client/ client_copy
Cloning into 'client_copy'...
done.
Submodule 'gui' (/home/deployer/client/gui.git) registered for path 'gui'
fatal: repository '/home/deployer/client/gui.git' does not exist
Clone of '/home/deployer/client/gui.git' into submodule path 'gui' failed
My .gitmodules
文件看起来像这样:
[submodule "gui"]
path = gui
url = ../client/gui.git
为什么会失败,我该如何解决这个问题?
问题在于你的.gitmodules
文件。子模块url
在您的项目中被定义为来自超级项目存储库的相对路径,但是当克隆子模块时,它们将使用path
地点。
换句话说,git 试图从url
位置,但在您的本地计算机上,它们实际上位于path
地点。
要解决此问题,只需克隆本地超级项目存储库(git clone /path/to/superproject
),然后进入新克隆的.gitsubmodules
并改变url
s to be ./<whatever-the-path-is>
。例如,您的 gui 子模块将变为:
[submodule "gui"]
path = gui
url = ./gui
更改每个子模块.gitmodules
像这样,然后运行:
git submodule sync
git submodule update --init --recursive
那应该可以了!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)