1. 程式人生 > >git對submodule多模組的tag操作

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 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。