git對submodule多模組的tag操作

2021-08-28 06:11:11 字數 3906 閱讀 2377

git對多模組的操作需要使用下面的命令

git submodule foreach
只需要在後面加上需要進行的操作,就會逐模組執行。比如:

git submodule foreach git stash
就會遍歷所有子模組並把子模組儲存起來。

因為 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 '******xxmodule'

tag_test

entering '******xxmodule'

tag_test

entering '******xxutilslibrary'

tag_test

entering '******xx_master'

tag_test

entering '******xxmodule'

tag_test

entering '******xxmodule'

tag_test

entering '******xxlibrary'

tag_test

entering '******xxapimodule'

tag_test

entering '******xxmodule'

tag_test

都已經成功打上了tag。

主倉庫和模組的倉庫依然需要分別推送

把子模組剛剛打的tag推送上去:

git submodule foreach git push origin tag_test

結果

entering '******xxmodule'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

entering '******xxmodule'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

entering '******xxutilslibrary'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

entering '******xx_master'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

entering '******xxmodule'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

entering '******xxmodule'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

entering '******xxlibrary'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

entering '******xxapimodule'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

entering '******xxmodule'

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

然後推送主倉庫:

git push origin tag_test

推送成功

total 0 (delta 0), reused 0 (delta 0)

to * [new tag] tag_test -> tag_test

因為標籤已經推送到遠端,要刪除遠端標籤就麻煩一點,先從本地刪除:

git tag -d tag_test

然後,從遠端刪除。刪除命令也是push,但是格式如下:

git push origin :refs/tags/tag_test

刪除成功:

to 

- [deleted] tag_test

然後本地逐模組刪除tag:

git submodule foreach git tag -d tag_test

然後遠端刪除:

git submodule foreach git push origin :refs/tags/tag_test

刪除成功:

entering '******xxmodule'

to - [deleted] tag_test

entering '******xxmodule'

to - [deleted] tag_test

entering '******xxutilslibrary'

to - [deleted] tag_test

entering '******xx_master'

to - [deleted] tag_test

entering '******xxmodule'

to - [deleted] tag_test

entering '******xxmodule'

to - [deleted] tag_test

entering 'discoverylibrary'

to - [deleted] tag_test

entering '******xxapimodule'

to - [deleted] tag_test

entering '******xxmodule'

to - [deleted] tag_test

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

git的submodule使用方法

新增子專案 git submodule add當專案git clone之後初始化子專案倉庫 git submodule update init recursive舉個例子,比如我的子模組叫做a core 在使用的時候經常會遇到 a core already exists and is not a v...

git 配置多對ssh key

1.生成兩個不同的ssh ssh keygen t rsa c yourmail gmail.com 生成金鑰步驟 執行兩次,設定不同的名字或路徑。2.配置 將公鑰 pub加入 託管平台的配置中,如github 當前使用者目錄中建立config檔案 該檔案用於配置私鑰對應的伺服器 default g...

git主庫和子庫的操作(submodule)

1 與主庫關聯 git submodule add git github.com test hdtlib.git modules externlib modules是表示主庫當前目錄中其中乙個資料夾。這裡的關聯的意思是把modules externlib與hdtlib子庫關聯起來。2 更新所有子庫的...