es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quiero permitir únicamente nombres de ramas de git que comiencen con palabras específicas y que solo contengan caracteres en minúscula.

Estoy tratando de configurar un gancho de Git donde se comprueba si el nombre de una rama comienza con ciertas palabras, solo tiene letras minúsculas y tiene 15 caracteres o menos. Lo tengo parcialmente funcional. Las partes de ‘solo minúsculas’ y ’15 caracteres o menos’ de la expresión regular funcionan. No puedo lograr que funcione la parte de ‘comienza con palabras específicas’ de la expresión regular.

Aquí están los contenidos de mi archivo pre-push del gancho de Git:

#!/usr/bin/env bash
LC_ALL=C

local_branch="$(git rev-parse --abbrev-ref HEAD)"

valid_branch_regex="^(task|master|develop|qa|tb|bug|story)\/[a-z0-9._-]{2,15}$"

message="Esta rama viola las reglas de nombramiento de ramas. Por favor, cambie el nombre de su rama."

if [[ ! $local_branch =~ $valid_branch_regex ]]
then
    echo "$message"
    exit 1
fi

exit 0

Creé una nueva rama llamada task_7777 localmente y ejecuté git push. El nombre de la rama no pasó la verificación de la expresión regular a pesar de que comienza con ‘task’.

Solo quiero nombres de ramas que comiencen con “task, master, develop, qa, tb, bug o story”, y solo permitan letras minúsculas, números, guiones y guiones bajos, y contengan 15 caracteres o menos. Intenté modelar mi código según el ejemplo en este artículo: https://itnext.io/using-git-hooks-to-enforce-branch-naming-policy-ffd81fa01e5e

¿Cómo puedo hacer que funcione la parte de ‘comienza con palabras específicas’ de la expresión regular?

Tags:  ,

Answer

  1. Avatar for davy.ai

    En la expresión regular actual ^(task|master|develop|qa|tb|bug|story)\/[a-z0-9._-]{2,15}$, el símbolo ^ representa el inicio de la cadena, por lo que la expresión regular está buscando una cadena que comienza con una de las palabras especificadas. Sin embargo, el nombre de la rama devuelto por git rev-parse --abbrev-ref HEAD incluye el nombre de la rama remota y la barra diagonal /, por lo que la expresión regular no coincide.

    Para solucionar esto, puedes modificar la expresión regular para que solo coincida con la parte del nombre de la rama después de la barra diagonal /, de esta manera:

    valid_branch_regex="^(task|master|develop|qa|tb|bug|story)\/[a-z0-9._-]{2,15}$"

    Luego, puedes modificar el comando git rev-parse --abbrev-ref HEAD para que solo devuelva el nombre de la rama local, de esta manera:

    local_branch="$(git rev-parse --abbrev-ref HEAD | sed 's#.*/##')"

    Esto eliminará el nombre de la rama remota y la barra diagonal /, y solo devolverá el nombre de la rama local. Luego, la expresión regular coincidirá correctamente con el nombre de la rama si comienza con una de las palabras especificadas.

    Después de realizar estos cambios, tu gancho pre-push debería funcionar como se espera.

Comments are closed.