如何使用git submodule:添加、查看、更新、修改、删除、克隆含submodule的项目

作用

Git submodule 功能可以让我们在一个仓库中添加另一个仓库作为当前仓库的子仓库,这样既方便了代码管理,也免去我们重复造轮子的精力和时间。注意:Git submodules 只是某个仓库某一时刻的一个状态的引用,即某个 commit 的引用。

添加子模块

  • 添加远程项目默认分支
git submodule add https://github.com/maonx/vimwiki-assets.git submodule_filename
  • 添加远程项目指定分支
git submodule add -b dev git@ip:src/name.git submodule_filename

添加子模块后运行git status, 可以看到目录有增加1个文件.gitmodules, 这个文件用来保存子模块的信息。

查看子模块

git submodule

会显示如下内容

e33f854d3f51f5ebd771a68da05ad0371a3c0570 assets (heads/master)

更新子模块

git submodule update

修改子模块

在子模块中修改文件后,直接提交到远程项目分支。

git add . 
git commit -m "commit" 
git push origin HEAD:master

删除子模块

删除子模块比较麻烦,需要手动删除相关的文件,否则在添加子模块时有可能出现错误,同样以删除assets文件夹为例

  • 首先,删除子模块文件夹
git rm --cached assets rm -rf assets
  • 然后,删除.gitmodules文件中相关子模块信息

[submodule "assets"] 
    path = assets 
    url = https://github.com/maonx/vimwiki-assets.git
  • 接着,删除.git/config中的相关子模块信息

[submodule "assets"] 
    url = https://github.com/maonx/vimwiki-assets.git
  • 最后,删除.git文件夹中的相关子模块文件

rm -rf .git/modules/assets

克隆包含子模块的项目

git clone https://github.com/maonx/vimwiki-assets.git assets --recursive
  • --recursive:用于递归地初始化和更新项目/子模块中的子模块。如果项目/子模块中存在其他子模块,这个选项将确保所有子模块都被正确地初始化和更新。

更新submodule别名配置

用于更新项目中已存在的子模块,可在.bashrc.zshrc/etc/profile中按需增加下述别名配置

alias GSU="git submodule update --init --recursive"
  • --init:指示 Git 初始化未初始化的子模块。如果子模块尚未初始化,它将被初始化并配置为跟踪指定的远程仓库。

  • --recursive:用于递归地初始化和更新子模块中的子模块。如果子模块中存在其他子模块,这个选项将确保所有子模块都被正确地初始化和更新。

运行命令 "git submodule init && git submodule update" 出错的原因可能是由于无法访问子模块所在的地址导致的。这种情况通常发生在子模块的地址无法被克隆或访问的情况下。 为了解决这个问题,你可以尝试以下两种解决方案之一: 1. 使用镜像地址:你可以将子模块的地址中的 "https://github.com" 替换为 "https://github.com.cnpmjs.org"。这是一个在国内提供的GitHub镜像地址,可以提高访问速度和稳定性。 2. 使用其他可访问的地址:如果镜像地址无法解决问题,你可以尝试寻找其他可访问的地址,例如在 Gitee 上找到别人 fork 的对应项目的地址。然后将子模块的地址替换为这个可访问的地址。 通过以上两种解决方案之一,你应该能够成功运行命令 "git submodule init && git submodule update",并且成功克隆子模块的代码。请注意,确保你有足够的网络连接,以便能够访问子模块所在的地址。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [git submodule update --init 失败解决办法](https://blog.csdn.net/sunjindeng123/article/details/124246100)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

棱角码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值