Git挂钩可以在子模块更改时更新超级项目?

时间:2019-02-26 23:02:02

标签: git azure-devops git-submodules azure-pipelines githooks

我有三个git存储库:ABCC是一个包含子模块AB的超级项目,跟踪每个子模块各自的主分支。

更改AB的主分支后,我必须在C中执行以下操作:

git submodule update --remote
git add A
git add B
git commit -m "Update submodule A or B"
git push

此时,将执行从C的自动构建和部署。

我正在寻找简化此过程的方法。理想情况下,对AB的master分支的任何提交都会触发钩子来更新,提交和推送到C。任何想法如何实现这一目标?

编辑:如果有我应该了解的特定于供应商的功能,则我将Azure DevOps用于git托管,并将Azure Pipelines用于构建和部署过程。

1 个答案:

答案 0 :(得分:0)

您可以使用git post-commit hook,当您在子模块中进行提交时,挂钩将被执行并执行命令。

  1. 转到每个子模块存储库。
  2. 使用以下内容创建文件 .git / hooks / post-commit

    #!/bin/sh
    
    branch="$(git rev-parse --abbrev-ref HEAD)"
    
    if [ "$branch" = "master" ]; then
      cd {super repo location}
      git submodule update --remote
      git add A
      git add B
      git commit -m "Update submodule A or B"
      git push
    fi
    
  3. 使其可执行(在 Windows 上不是必需的):

    $ chmod +x .git/hooks/pre-commit