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 更新所有子庫的...