我有一个git repo,它由来自不同存储库的多个git子模块组成(我可以访问以应用有关CI或Hooks的任何更改)
我的问题是,只要有提交,主仓库就会自动更新并从子模块master分支中获取最新更改?
我当时在考虑钩子和CI,但不确定如何!
之所以没有为此特定模块使用包管理器,是因为我们需要源代码,并且还要与主库代码同时进行编译。
答案 0 :(得分:1)
经过两天的研究并试图找到一种解决方案,并牢记也许使用包管理器可能是最好的解决方案,我最终完成了此.gitlab-ci.yml
更改,并将其应用于子模块存储库:
android:
stage: deploy
script:
- cd ~
- mkdir .ssh
- echo SSH_KEY_TO_ACCESS_GIT > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- eval `ssh-agent -s`
- ssh-add ~/.ssh/id_rsa
- ssh-keyscan -t rsa YOUR.GIT.com > ~/.ssh/known_hosts
- git config --global user.email "ci@yourhost.com"
- git config --global user.name "CI"
- git clone --single-branch -b develop git@git.YOUR_REPO.git
- cd YOUR_REPO_FOLDER
- git submodule init
- git submodule update
- cd YOUR_SUBMODULE_FOLDER
- git fetch --all
- git reset --hard origin/master
- cd ..
- git add .
- git commit -m "Update YOUR SUBMODULE automatically to latest"
- git push origin develop
only:
- master
此任务将在CI任务结束时提取我的存储库,并更新子模块并将提交推送到存储库中。
请记住,您需要在帐户中添加一个ssh密钥,以允许CI进入您的仓库。
我仍然愿意接受任何更方便的建议。
答案 1 :(得分:0)
将子模块视为一种工具,用于将特定版本的依赖项包含到源代码树中(显然希望您不要这样做)。但是,通常使用包管理器(Maven,NPN,Nuget等)是一种更好的方法。