Git:更改克隆子模块的源。

40

我创建了一个名为submodule的项目,并将其上传到Github。

我创建了另一个名为supermodule的项目,然后执行了以下操作:

cd supermodule
git init
mkdir lib
git clone git://github.com/tandu/submodule lib/submodule
git submodule add ./lib/submodule lib/submodule

这个方法本身是有效的,但在网站上查看文件时,无法找到子模块的链接(实际上它一直显示“正在加载提交数据”)。子模块文件夹本身具有正确的origin

显然,我应该做的是

...
mkdir lib
git submodule add git://github.com/tandu/submodule lib

...但现在为时已晚。我该如何使此项目中的子模块正确指向origin

2个回答

72

这似乎很大程度上取决于您使用的git版本。

  1. 如果存在,则更改.gitmodules文件中[submodule“<dirname>”]部分中的url条目。
  2. 如果存在,则更改.git/config文件中[submodule“<dirname>”]部分中的url条目。
  3. 更改子模块本身的配置中的urlconfig文件的位置取决于版本。旧版本将其放在<dirname>/.git/config中,新版本将其放在.git/modules/<dirname>/config中。但是,您始终可以使用以下命令:
cd <dirname>
git config remote.origin.url <new_url>

13
使用当前版本的 Git (2.1.0),执行 git submodule sync --recursive 就足以让我更新到子模块 origin 的远程版本。 - desseim

18

在另一个问题中,我找到了适用于更新版 Git(2.25)的答案。

git submodule [--quiet] set-url [--] <path> <newurl>

假设您有一个子模块位于目录external/foo-lib,它的源为https://github.com/example-user/foo-lib.git,您想将其更改为您自己的分支https://github.com/your-account/foo-lib.git,那么在Git项目的根目录中输入以下命令:

git submodule set-url external/foo-lib https://github.com/your-account/foo-lib.git


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接