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

How to force my main repo to update when a submodules is updated?

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

我的问题是我的主仓库如何自动更新并在有提交时从我的子模块主分支获得最新更改?

我在考虑 hook 和 CI,但不确定怎么做!

我们没有为这个特定模块使用包管理器的原因是我们需要源代码,而且我们与主要 repo 代码同时进行编译。

将子模块视为将特定版本的依赖项包含到源代码树中的工具(这显然是您不想做的)。但是,包管理器(Maven、npn、Nuget 等)通常是更好的方法。

经过两天的研究并试图找到解决方案,并牢记使用包管理器可能是最好的解决方案,我最终做出了这个 .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 推送到您的存储库。

我仍然愿意接受任何更方便的建议。

目前 GitLab 支持存储库子模块 API 以更新存储库中现有的子模块引用。有关详细信息,请参阅 https://docs.gitlab.com/ee/api/repository_submodules.html