git:更改克隆子模块的来源

Exp*_*lls 26 git github git-submodules

我创建了一个项目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
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在网站上,它在查看文件时找不到子模块的链接(实际上它只是说"永远加载提交数据").子模块文件夹本身是正确的origin.

显然,我应该做的是

...
mkdir lib
git submodule add git://github.com/tandu/submodule lib
Run Code Online (Sandbox Code Playgroud)

......但现在已经太晚了.如何正确指向此项目中的子模块origin

Mic*_*ild 54

这显然非常依赖于您使用的git版本.

  1. 如果存在,请更改文件部分中的url条目.[submodule "<dirname>"].gitmodules
  2. 如果存在,请更改文件部分中的url条目.[submodule "<dirname>"].git/config
  3. 更改url子模块本身的配置.config文件的位置取决于版本.旧版本有<dirname>/.git/config,新版本.git/modules/<dirname>/config.但是,您始终可以使用以下命令:
cd <dirname>
git config remote.origin.url <new_url>
Run Code Online (Sandbox Code Playgroud)

  • 使用当前版本的git(2.1.0),执行`git submodule sync --recursive`足以让我更新到子模块`origin`远程. (7认同)

Luk*_*lek 20

在其他问题中,我找到了更现代的 Git 版本(2.25)的答案

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

假设您的external/foo-liborigins目录中有子模块https://github.com/example-user/foo-lib.git,并且您想将其更改为您的 fork https://github.com/your-account/foo-lib.git,然后在 git 项目类型的根目录中:

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