带有子模块的 GIT 存储库可以指向两个不同的存储库

问题描述 投票:0回答:1

我们有一个包含一些子模块的存储库。子模块目录之一是 API。根据主存储库的分支,API 子目录指向 API_V1 存储库或 API_V2 存储库。如果我克隆主存储库并进行开发,那么当我子模块初始化/更新时,它会指向 API_V2。但是,如果我切换到一个非常旧的分支而不是开发,并执行子模块更新或 init/update git 无法在 API 子模块中找到正确的提交,因为它仍在使用 API_V2。是否可以让 git 更改为 API 子模块中的正确存储库。我们的开发人员这样做是为了避免将 API 子目录重命名为 API_V1 和 API_V2,这需要进行许多脚本更改。 谢谢

git clone git-submodules
1个回答
0
投票

在超级项目(父存储库)中使用

git checkout
git switch
切换分支后,旧的
.gitmodules
会被签出。如果文件的子模块具有不同的 URL,则应在
.git/config
中更新 URL,因为 Git 不直接使用
.gitmodules
中的 URL,它仅使用
.git/config
。更新 URL 的命令是
git submdule sync
(如果您有子模块树,请添加
--recursive
)。之后
git submodule update --init
应该将子模块更新为存储在超级项目中的相应提交。

您可以使用

post-checkout
hook 自动化该过程。放这个

#!/bin/sh
new_branch="$3"

if [ "$new_branch" = 1 ]; then
    git submodule sync --recursive
    git submodule update --init --recursive
fi

exit 0

.git/hooks/post-checkout
中,通过运行
chmod a+x .git/hooks/post-checkout

使文件可执行
© www.soinside.com 2019 - 2024. All rights reserved.