avatar

目录
添加、删除 submodule

如何为一个项目增加submodule

git 项目中,可以使用下面的命令,为其增加submodule

(假设需要增加的项目的 url 为 git@github.com:violatangxl/xxx.git, 分支为mod-develop,path 为 sub)

go
1
git submodule add -b mod-develop git@github.com:violatangxl/xxx.git sub 

执行之后,会发现当前项目下有了一个.gitmodules 文件,文件内容是

bash
1
2
3
4
[submodule "sub"]
path = sub
url = git@github.com:violatangxl/xxx.git
branch = mod-develop

同时,.git/config文件也会增加

bash
1
2
3
[submodule "sub"]
url = git@github.com:violatangxl/xxx.git
active = true

(注意着两个地方的修改,当有 submodule 删除时,要用到)

执行

bash
1
git submodule update --init

可以从远程拉取相关的代码到submodule中了。

然后就可以看到文件目录多了一个sub的文件夹,里面就是拉下来的子模块的代码。

同时在 .git/modules/module_path/目录也可以看到sub相关的代码了。

这里有个我自己尝试的 case,当时我的目录结构是

bash
1
2
3
4
5
6
7
.
├── README.md
├── .git
├── go.mod
├── go.sum
├── src
├── app

即实际项目代码都在/src 目录下,与.gitgo.mod不在一层,作为小白的我不知道能不能在src目录下引入submodule
(其实盲猜应该是可以) 为了验证便在src目录下执行了submodule add命令,发现的确是可以的,添加后的.gitmodules中的 path,就是src/sub

修改 submodule

前面提到了在src路径下尝试 submodule add,自然就有在与文件.git同级下的add操作,所以就涉及到了已有submodule的删除(修改)操作。如果之前的submodule没有移除干净,再次的add会报以下问题
If the local git directory is not the correct repo or you are unsure what this means choose another name with the '--name' option.
移除已有submodule的主要步骤如下:

  1. submodule 移除 git版本控制
    git rm --cached ub
  2. 移除.gitmodules
    移除.gitmodules(当然,如果项目中有多个 submodule,只删除掉需要删除的,即上文提到的
    bash
    1
    2
    3
    4
    [submodule "sub"]
    path = sub
    url = git@github.com:violatangxl/xxx.git
    branch = mod-develop
  3. 修改.git/config
    移除.git/config中增加的
    bash
    1
    2
    3
    [submodule "sub"]
    url = git@github.com:violatangxl/xxx.git
    active = true
  4. 删除 .git/modules/中的相关代码
    bash
    1
    rm -rf .git/modules/sub
    大功告成~

然后就可以重新add继续折腾了。


这篇文章的由来,是因为作为一向对项目管理,以及gopath不熟悉的小白的我,下定决心把一个历史悠久,依旧使用glide的项目,改为使用go mod进行依赖管理,这种事情看多少遍文章,还是不如自己折腾一遍。过程中间断断续续了解了一些相关的知识,当然最终也是搞定了,还是十分开森的。特此记录一下过程中使用的主要流程性命令。

BTW,提到glide,链一下上次写glide文章,同时再次为S老师打个广告,glide中文文档)

文章作者: Viola Tangxl
文章链接: https://violatangxl.github.io/2020/12/09/git-submodule/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 椰子是只猫
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论