Gitlab,CI,Submodules
當git的repo中需要引用到其他project時 (例如我把gRPC的protos檔案放到另一個repo中時) 就需要用到git 的submodules功能 要注意是項目的Owner必需是同一個人
先用git submodule 把項目拉進來
git submodule add [email protected]:project-proto/project-proto.git protos
新增一個.gitmodules指定另一個repo
vi .gitmodules
...
[submodule "protos"]
path = protos # 放到項目中的位置
url = ../project-proto.git # 必須是relative path
# 因為是相對路徑,所以項目擁有者必須為同一人,gitlab才會找到項目進行匯入
# 否則只能用fullpath,存取其他private repo時可能會出現權限問題
# url = https://gitserver.com/group/project-x.git
然後在.gitlab-ci.yml 新增一個設定 (optional)
variables:
GIT_SUBMODULE_STRATEGY: recursive # 會把submodule中的submodule也引進到項目中
之後你在submodule中的改動只需要在該子目錄中commit
# e.g. 改動了x.proto
cd protos
git add x.proto
git commit -m "updated x.proto"
# 這邊只會把更新push到submodule當中
git push
# 回到父項目中更新submodule的狀態
cd ..
git add -u
git commit -m "更新了submodule"
git push
其他項目只也用了這個submodule的只需
git submodule update --recursive --remote
# 或者
git pull --recurse-submodules
就可以更新submodule了