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