如何为一个项目增加submodule
在 git
项目中,可以使用下面的命令,为其增加submodule
(假设需要增加的项目的 url 为 git@github.com:violatangxl/xxx.git
, 分支为mod-develop
,path 为 sub
)
1 | git submodule add -b mod-develop git@github.com:violatangxl/xxx.git sub |
执行之后,会发现当前项目下有了一个.gitmodules
文件,文件内容是
1 | [submodule "sub"] |
同时,.git/config
文件也会增加
1 | [submodule "sub"] |
(注意着两个地方的修改,当有 submodule 删除时,要用到)
执行
1 | git submodule update --init |
可以从远程拉取相关的代码到submodule
中了。
然后就可以看到文件目录多了一个sub
的文件夹,里面就是拉下来的子模块的代码。
同时在 .git/modules/module_path/
目录也可以看到sub
相关的代码了。
这里有个我自己尝试的 case,当时我的目录结构是
1 | . |
即实际项目代码都在/src
目录下,与.git
、go.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
的主要步骤如下:
- 将
submodule
移除git
版本控制git rm --cached ub
- 移除
.gitmodules
移除.gitmodules
(当然,如果项目中有多个submodule
,只删除掉需要删除的,即上文提到的bash1
2
3
4[submodule "sub"]
path = sub
url = git@github.com:violatangxl/xxx.git
branch = mod-develop - 修改
.git/config
移除.git/config
中增加的bash1
2
3[submodule "sub"]
url = git@github.com:violatangxl/xxx.git
active = true - 删除
.git/modules/
中的相关代码大功告成~bash1
rm -rf .git/modules/sub
然后就可以重新add
继续折腾了。
这篇文章的由来,是因为作为一向对项目管理,以及gopath
不熟悉的小白的我,下定决心把一个历史悠久,依旧使用glide
的项目,改为使用go mod
进行依赖管理,这种事情看多少遍文章,还是不如自己折腾一遍。过程中间断断续续了解了一些相关的知识,当然最终也是搞定了,还是十分开森的。特此记录一下过程中使用的主要流程性命令。