当子模块更新时,如何强制我的主仓库更新?

时间:2018-12-11 07:23:23

标签: git continuous-integration git-submodules githooks

我有一个git repo,它由来自不同存储库的多个git子模块组成(我可以访问以应用有关CI或Hooks的任何更改)

我的问题是,只要有提交,主仓库就会自动更新并从子模块master分支中获取最新更改?

我当时在考虑钩子和CI,但不确定如何!

之所以没有为此特定模块使用包管理器,是因为我们需要源代码,并且还要与主库代码同时进行编译。

2 个答案:

答案 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等)是一种更好的方法。