git对submodule多模块的tag操作(并同步到远程分支)

前言

git对多模块的操作需要使用下面的命令

git submodule foreach 

只需要在后面加上需要进行的操作,就会逐模块执行。比如:

git submodule foreach git stash

就会遍历所有子模块并把子模块储存起来。

打tag

因为 git submodule foreach只会对子模块而不会对主仓库操作,所以如果向对所有仓库都打上相同的tag就需要单独对主仓库打tag。

git tag tag_test

然后对子模块打tag,输入命令
git submodule foreach git tag tag_test
就会逐模块的打上tag_test,输入以下命令查看:
git submodule foreach git tag
结果:

Entering 'XXXXXXXXModule'
tag_test
Entering 'XXXXXXXXModule'
tag_test
Entering 'XXXXXXXXUtilsLibrary'
tag_test
Entering 'XXXXXXXX_Master'
tag_test
Entering 'XXXXXXXXModule'
tag_test
Entering 'XXXXXXXXModule'
tag_test
Entering 'XXXXXXXXLibrary'
tag_test
Entering 'XXXXXXXXApiModule'
tag_test
Entering 'XXXXXXXXModule'
tag_test

都已经成功打上了tag。

推送到gitlab

主仓库和模块的仓库依然需要分别推送
把子模块刚刚打的tag推送上去:
git submodule foreach git push origin tag_test
结果

Entering 'XXXXXXXXModule'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXXModule.git
 * [new tag]         tag_test -> tag_test
Entering 'XXXXXXXXModule'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXXModule.git
 * [new tag]         tag_test -> tag_test
Entering 'XXXXXXXXUtilsLibrary'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXXUtilsLibrary.git
 * [new tag]         tag_test -> tag_test
Entering 'XXXXXXXX_Master'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXX_Master.git
 * [new tag]         tag_test -> tag_test
Entering 'XXXXXXXXModule'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXXModule.git
 * [new tag]         tag_test -> tag_test
Entering 'XXXXXXXXModule'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXXModule.git
 * [new tag]         tag_test -> tag_test
Entering 'XXXXXXXXLibrary'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXXLibrary.git
 * [new tag]         tag_test -> tag_test
Entering 'XXXXXXXXApiModule'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXXApiModule.git
 * [new tag]         tag_test -> tag_test
Entering 'XXXXXXXXModule'
Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXXModule.git
 * [new tag]         tag_test -> tag_test

然后推送主仓库:
git push origin tag_test
推送成功

Total 0 (delta 0), reused 0 (delta 0)
To http://gitlab.XXXXXXXX_Master.git
 * [new tag]         tag_test -> tag_test

删除tag

因为标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d tag_test
然后,从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/tag_test

删除成功:

To http://gitlab.XXXXXXXX_Master.git
 - [deleted]         tag_test

然后本地逐模块删除tag:
git submodule foreach git tag -d tag_test
然后远程删除:
git submodule foreach git push origin :refs/tags/tag_test
删除成功:

Entering 'XXXXXXXXModule'
To http://gitlab.XXXXXXXXModule.git
 - [deleted]         tag_test
Entering 'XXXXXXXXModule'
To http://gitlab.XXXXXXXXModule.git
 - [deleted]         tag_test
Entering 'XXXXXXXXUtilsLibrary'
To http://gitlab.XXXXXXXXUtilsLibrary.git
 - [deleted]         tag_test
Entering 'XXXXXXXX_Master'
To http://gitlab.XXXXXXXX_Master.git
 - [deleted]         tag_test
Entering 'XXXXXXXXModule'
To http://gitlab.XXXXXXXXModule.git
 - [deleted]         tag_test
Entering 'XXXXXXXXModule'
To http://gitlab.XXXXXXXXModule.git
 - [deleted]         tag_test
Entering 'DiscoveryLibrary'
To http://gitlab.intsig.net/CCAndr/DiscoveryLibrary.git
 - [deleted]         tag_test
Entering 'XXXXXXXXApiModule'
To http://gitlab.XXXXXXXXApiModule.git
 - [deleted]         tag_test
Entering 'XXXXXXXXModule'
To http://gitlab.XXXXXXXXModule.git
 - [deleted]         tag_test

重命名tag

git并没有直接重命名tag的命令,所以需要其他的方法。
参考这个网站

#创建一个旧的tag
git tag old
#创建一个依赖old的新标签
git tag new
#删除旧的标签
git tag -d old
git push origin :refs/tags/old
#上传新的标签
git push origin --tags

对模块的操作类似,不过是需要在每个命令前加一句
git submodule foreach

    原文作者:三也视界
    原文地址: https://www.jianshu.com/p/527397de5f53
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞