¿Fusionar automáticamente una rama en otra base en algunas condiciones usando hook?

Nov 09 2020

Tengo dos ramas en mi repositorio de github mastery una devrama. Tengo un requisito en el que necesito fusionar masterrama en devrama bajo las siguientes condiciones:

  • Una vez que un PR se fusiona en la rama maestra directamente, necesito fusionar la rama maestra con la rama dev automáticamente.
  • Cada vez que alguien agrega una confirmación en la rama maestra directamente, necesito fusionar la masterrama con la devrama automáticamente.

¿Es posible hacerlo por casualidad? Creo que podemos hacer que esto funcione con git Hooks, pero no estoy seguro de cómo hacerlo. ¿Alguien puede dar un ejemplo de cómo lograr esto?

Lo leí en línea y parece que puedo usar el post-receivegancho con el contenido a continuación, pero estoy confuso sobre cómo hacer esto solo si alguien agrega un compromiso a la masterrama o si cualquier RP se fusiona con la rama maestra. ¿También es esta la forma correcta de hacerlo?

  git checkout master
  git pull

  git checkout dev
  git pull

  git merge master --no-ff --no-edit
  git push

Aprecio que puede que no siempre sea posible debido a los conflictos de fusión, pero si es posible, nos gustaría que ocurriera automáticamente.

Actualizar

Después de leer más sobre Github Actions, creé un archivo como este .github/workflows/merge-back-to-dev.ymlen mi carpeta raíz del repositorio de git con el contenido a continuación. ¿Esto se ve bien? ¿Necesito todos estos campos como runs-on?

  name: 'Nightly Merge'

  on:
    push:
      branches:
        - master

  jobs:
    nightly-merge:

      runs-on: ubuntu-latest

      steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Nightly Merge
        uses: robotology/[email protected]
        with:
          stable_branch: 'master'
          development_branch: 'dev'
          allow_ff: false

Entonces, ahora con este cambio, cada vez que agrego un compromiso a la masterrama directamente o cualquier PR se fusiona con la masterrama directamente, la rama maestra se fusionará con la rama de desarrollo automáticamente, ¿verdad?

Respuestas

1 VonC Nov 10 2020 at 23:07

Para un servidor privado GHE (GitHub Enterprise), solo se admiten los ganchos de pre-recepción , que no es lo que necesita (los enganches posteriores a la recepción estarían bien)

Dado que el OP también tiene un servidor GitLab, un gitab-ci.ymlpodría hacer el truco y realizar la fusión.
Un poco como esta esencia :

merge_back:
  stage: merge back master to dev
  only:
      - master
  script:
    - git config --global user.email "$GIT_USER_EMAIL" - git config --global user.name "$GIT_USER_NAME"
    - git switch dev
    - git merge $CI_COMMIT_SHA --no-commit --no-ff

Respuesta original (cuando pensé que se trataba de github.com)

Eso no sería usar ganchos, sino acciones de GitHub , que ayudan a automatizar un proceso ejecutado en el lado de GitHub (a diferencia de los ganchos, que se ejecutan en el lado del cliente)

Puede usar el on..en su .github/workflows/myscript.yml(puede reemplazar "myscript" por un nombre más caro, como merge-back-to-dev.yml)

Puede usar una acción como nightly-merge, que fusiona automáticamente la rama estable ( mastero main) en la de desarrollo. Excepto en su caso, lo llamaría explícitamente en el evento push.