如何更改git子模块的远程仓库?

9 浏览
0 Comments

如何更改git子模块的远程仓库?

我已经创建了一个带有子模块的git仓库。我可以告诉子模块自己如何更改远程仓库路径,但我不知道如何告诉父仓库如何更改子模块的远程仓库路径。如果我需要手动操作,我不会感到意外,因为即使删除子模块也不容易。

0
0 Comments

问题的出现原因:在使用git submodule时,可能会需要更改子模块的远程仓库地址,但是只使用命令行输入上述命令时,只会在本地仓库上进行更改,不会影响到子模块的远程仓库地址。

解决方法:在执行上述命令之后,需要记得将更改推送到远程仓库中,可以使用以下命令进行推送:git add .gitmodules git commit -m "modified submodule URL" git push origin master。然而,只执行这些命令可能会导致问题,因为子模块的远程仓库仍然保留着旧的URL地址。为了解决这个问题,可以在子模块的仓库中执行其他命令。

需要注意的是,如果子模块中还包含有子模块,那么上述命令将会远程更新子模块中的子模块,这可能不是你所需要的。

总结一下,通过在命令行中使用上述命令可以更改git submodule的远程仓库地址,但是需要记得将更改推送到远程仓库中,并且可能需要在子模块的仓库中执行其他命令来完全解决问题。

0
0 Comments

如何更改git子模块的远程仓库?

问题的原因:要更改git子模块的远程仓库,需要编辑.gitmodules文件来更新URL,并运行git submodule sync --recursive命令将该更改反映到父项目和工作副本。然后需要进入.git/modules/path_to_submodule目录并更改其配置文件以更新git路径。

解决方法:如果要更改的仓库历史与当前仓库不同,则需要手动检出新的分支。使用以下命令:

git submodule sync --recursive

cd

git fetch

git checkout origin/master

git branch master -f

git checkout master

这个命令会同步子模块的URL配置,包括以前的提交。可以使用git submodule foreach -q git config remote.origin.url命令查看子模块的实际URL。每个子模块只能与一个git仓库关联。

在更新.gitmodules文件之前,建议先更新.git/config文件。可以使用git submodule deinit modulename命令取消初始化子模块,然后使用git submodule init git/path/to/repo.git modulename命令重新初始化子模块。

如果路径也发生了变化,不建议使用这种方法,因为它会在.git中留下对旧子模块路径的残留引用,难以手动清理。更好的方法是运行git submodule update --init --recursive --remote命令,它会将仓库更改为新的远程仓库。

如果处于"linked working tree"(附加的工作树)中,则配置文件不在.git/modules/path_to_submodule目录中,而是在path_to_main_working_tree/.git/worktrees/worktree_name/modules/path_to_submodule目录中。

以上是如何更改git子模块的远程仓库的原因和解决方法。

0