这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 【git车轮向前进】GitSubmodule的库地址如何修改为国内源

共1条 1/1 1 跳转至页

【git车轮向前进】GitSubmodule的库地址如何修改为国内源

院士
2026-11-06 14:54:44     打赏

有不少在github上开源的SDK,在咱们国内都有镜像库了,但多数其子库并没有一并同步更新。我在更新乐鑫SDK的时候就遇到了这个问题。走了一些弯路,但总算是搞定了,分享出来供大家使用。

修改git submodule的库地址,要分清楚“记录地址”和“实际地址”这两个位置——只改一个往往不生效,这是最容易踩的坑。git submodule的URL存在于两个地方:

  • .gitmodules:仓库里的记录文件,会被提交、被共享,决定别人 clone 时从哪拉取。

  • .git/config(或.git/modules/config):本地实际生效的地址,clone 时从 .gitmodules 拷过来的。

方法一:git submodule set-url

新版Git提供了一条命令,同时改.gitmodules和.git/config,最省事:

# 先查看子模块名称,路径通常就是名称
git submodule status
cat .gitmodules

# 修改指定子模块的URL(用子模块路径,如components/mbedtls)
git submodule set-url  <新地址>

例如:

git submodule set-url components/mbedtls https://gitee.com/mirrors/mbedtls.git

执行后可以git diff .gitmodules确认改动。

方法二:手动改 .gitmodules + sync

第1步:编辑 .gitmodules 文件

vim .gitmodules

把里面的url = ...改成新地址:

[submodule "components/mbedtls"]
    path = components/mbedtls
    url = https://gitee.com/239580/mbedtls.git

第2步:写入本地配置并强制同步

git submodule sync --recursive

git是分步,分区实现的。单纯更新.gitmodules文件,就是更新文件,并不会生效。必须再运行sync命令,才会把.gitmodules里的新URL同步到.git/config和.git/modules/*/config。不做这一步,改 .gitmodules 后本地拉取仍然走旧地地,这就是“改了没生效”的根本原因。

第3步:重新拉取

git submodule update --init --recursive

方法三:直接改 .git/config

如果你只是本地想换镜像、并不打算提交这个改动,直接改本地 config 即可,不污染 .gitmodules:

git config submodule..url <新地址>

# 示例
git config submodule.components/mbedtls.url https://gitee.com/mirrors/mbedtls.git

或直接编辑文件:

vim .git/config

总结

我在更新ESP32的git库时,使用的是方法二。我觉得挺方便的。乐鑫的大版本是在gitee上有镜像,但下面几个引用的git库是没有的。分享一下我的更新完成的文件

[submodule "components/json/cJSON"]
    path = components/json/cJSON
    url = https://gitee.com/gongfengzztx/cJSON.git

[submodule "components/mbedtls/mbedtls"]
    path = components/mbedtls/mbedtls
    url = https://gitee.com/239580/mbedtls.git

[submodule "components/lwip/lwip"]
    path = components/lwip/lwip
    url = https://gitee.com/OliveFish/esp-lwip.git

[submodule "components/mqtt/esp-mqtt"]
    path = components/mqtt/esp-mqtt
    url = https://gitee.com/javenspace/esp-mqtt.git

[submodule "components/coap/libcoap"]
    path = components/coap/libcoap
    url = https://jihulab.com/esp-mirror/obgm/libcoap.git





关键词: Submodule     国内源     git    

共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]