git的submodule用法

新博客地址:https://gyrojeff.top,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客👇

本文标题:git的submodule用法

文章作者:gyro永不抽风

发布时间:2020年09月11日 - 10:09

最后更新:2020年09月15日 - 08:09

原始链接:http://hexo.gyrojeff.moe/2020/09/11/git%E7%9A%84submodule%E7%94%A8%E6%B3%95/

许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 转载请保留原文链接及作者!

submodule介绍

submodule,即子模块,在项目中添加一个submodule就相当于引用了一个别的repo,记下来我将分别针对不同的情形展开讨论

添加submodule

main project当中:

1
git submodule add <submodule_url> <path>

其中,submodule_urlsubmodulerepo地址,path为接下来clone的地址。运行之后,会发现目录下多出了.gitmodule文件。

已经clone了一个项目,添加为submodule

和上面一样:

1
git submodule add <submodule_url> <path>

改动了submodule内的代码

首先明确一个概念:submodule是一个独立、完整的repo。这意味着,你可以像往常一样在submodule的根目录下进行add/commit/push,这都是完全没有问题的。但是,如果submodule没有commit,主项目是无法commit的,所以如果要commit主项目,首先要确保submodule内各个项目都没有问题。在此之外,当submodule内已经好了之后,我们便可以commit主项目,并可以发现主项目当中submodule是作为一个整体来计算的。

删除submodule

写在一个子模块:

1
git submodule deinit

如果:
1
git submodule deinit --force

那么即使本地repo有未提交的更改也会被移除. 上述命令是删除.git/config中的配置文件,若要继续删除本地的文件:
1
git rm <submodule>

来删除。

操作完毕之后我们发现主项目就有更改了,进行commit来提交更改:

1
git commit -m "Deleted the submodule project."

submodule有远程更新

1
2
cd <path>
git pull origin master

如果有多个submodule,可以:

1
git submodule foreach 'git pull origin master'

clone带有submodule的项目

1
git clone <repo-url> --recurse-submodules

或者:

1
2
3
git clone <repo-url>
git submodule init
git submodule update

posted @ 2020-09-15 09:13  gyro永不抽风  阅读(394)  评论(0编辑  收藏  举报