git: 使用submodule进行托管
Posted qiyuexin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git: 使用submodule进行托管相关的知识,希望对你有一定的参考价值。
问题描述:
当一个prj.git项目里引用了另外一个moduleA.git项目作为其一个子模块,由于该模块未完善后续可能将继续升级,也就是需要两套git分别管理prj.git与moduleA.git,而prj.git又使用了moduleA.git。
使用submodule进行管理
1. 新建一个项目git
2. 新建一个mouleA.git
3. 在prj.git里添加moudleA.git。
带有submodule仓库的克隆方法
1. 直接clone的话是没有submodule信息的,只有文件夹。
这是因为,父项目的git并不会记录submodule的文件变动,它是按照commit id指定submodule的git header。
不过可以先对submodule初始化,然后更新,就可以clone到原module的内容。
2. 第二种方式使用递归clone,添加参数 --recursive。
在远程修改submodule及本地更新submodule
1. 远程更新submodule
2. 本地更新submodule
2.1 直接pull或者更新submodule是无效的,因为远程prj.git并未记录submodule有任何的改动,即远程prj.git不知道也根本不管submodule有没有更新,除非你在prj.git有commit记录。
2.2 在这种情况下仍要更新submodule,就需要直接进入submodule仓库下并切换为需要的分支进行更新。
2.3 这时prj.git 理所当然地发生了变化,根据需要提交变更记录即可。
在本地修改submodule并push后,他处submodule更新流程
1. 本地A修改submodule并Push
1.1. 现在本地submodule添加一个新功能:c.md,然后push。
1.2 接着,提交本次prj.git的变更记录:
2. 他处B更新submodule
2.1 pull后发现submodule发生了改动:
2.2 使用update对submodule进行更新
删除submodule
1. git rm moduleA,即可
这样做git的config文件中仍有相关记录,但是不影响使用,如果新clone的话,就不会有相关的记录了。
如果介意可以手动将该文件的相关行删除。
2. 新clone后,config则无相关记录
以上是关于git: 使用submodule进行托管的主要内容,如果未能解决你的问题,请参考以下文章