Woo*_*low 7 git git-clone git-submodules
假设我递归地克隆一个存储库。
$ 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'
Run Code Online (Sandbox Code Playgroud)
现在我想创建该本地存储库的本地克隆(可能在本地进行并提交更改之后)。
$ 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
Run Code Online (Sandbox Code Playgroud)
我的.gitmodules文件如下所示:
[submodule "gui"]
path = gui
url = ../client/gui.git
Run Code Online (Sandbox Code Playgroud)
为什么会失败?我该如何解决这个问题?
小智 6
问题出在你的.gitmodules文件上。项目中的子模块url被定义为超级项目存储库的相对路径,但是当克隆子模块时,它们将使用该path位置放置。
换句话说,git 试图从该url位置拉出子模块,但在您的本地计算机上,它们实际上位于该path位置。
要解决此问题,只需克隆本地超级项目存储库 ( git clone /path/to/superproject),然后进入新克隆.gitsubmodules并将urls 更改为./<whatever-the-path-is>。例如,您的 gui 子模块将变为:
[submodule "gui"]
path = gui
url = ./gui
Run Code Online (Sandbox Code Playgroud)
将每个子模块更改为.gitmodules如下所示,然后运行:
git submodule sync
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
那应该可以了!
| 归档时间: |
|
| 查看次数: |
5136 次 |
| 最近记录: |