1

我有一个顶级项目,大约有 10 个子模块和一些嵌套的子模块。

./top-project/
./top-project/module-a
./top-project/module-b
...

一些子模块有一个经典的 url,比如url = git:software/module-a,其他的有一个相对于远程顶级项目的 url,比如url = ../module-b. 顶级项目网址是url = git:software/top-project.

我想创建顶级项目及其所有子模块的工作树副本。

git worktree add -f ../top-project-v2

但是我找不到使子模块指向其原始路径的方法。我希望那个top-project-v2/module-agit 指向top-project/module-a,而不是克隆一个全新的模块-a。

如果我这样做cd top-project-v2; git submodule upate --init --recursive,则命令成功,但子模块未链接到顶级项目子模块。

如果我这样做git checkout --recurse-submodules origin/v2,我会收到一个错误:

git checkout --recurse-submodules origin/v2
fatal: not a git repository: ../../top-project/.git/worktrees/top-project-v2/modules/module-a
fatal: could not reset submodule index

有什么办法吗?

4

1 回答 1

0

如果子模块不是可选的或便宜到无法获取,请将主仓库中的子模块历史记录作为分支并git submodule init; git worktree add为它们携带。

于 2021-02-22T19:04:07.180 回答