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_url
为submodule
的repo
地址,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 | cd <path> |
如果有多个submodule
,可以:
1 | git submodule foreach 'git pull origin master' |
clone
带有submodule
的项目
1 | git clone <repo-url> --recurse-submodules |
或者:
1 | git clone <repo-url> |