• Español
  • Branches y commits

    Este estándar define cómo se nombran las branches y cómo se escriben los mensajes de commit en los repositorios de Crehana.

    Nombre de la branch

    Toda branch sigue esta estructura:

    TICKET-CODE-descripcion

    Ejemplos:

    HRIS-1234-validacion-email
    CELC-890-fix-query-cursos
    SWAT-999

    Mensaje del commit

    Todo commit incluye el código del ticket de Jira y una descripción breve. El formato es obligatorio:

    [ID-TICKET]-<tipo>(<alcance(opcional)>): <descripción corta>
    
    Descripción del cambio (opcional)

    Ejemplos:

    HRIS-1234-feat agrega validación de email
    CELC-567-fix query de cursos
    SWAT-6789-hotfix fix error de resultados de areas
    CORE-1234-feat(crehana-ui): add new enum in user form options

    Merge a main

    Al hacer merge a main o master, haz squash de los commits para que el historial quede lo más legible posible.

    Automatiza el ID del ticket con un hook

    El hook prepare-commit-msg extrae el ID del ticket del nombre de la branch y lo antepone al mensaje del commit, así no lo escribes cada vez. Configúralo en cada repositorio donde trabajes.

    1. Crea el archivo del hook, sin extensión:

      cd .git/hooks
      nano prepare-commit-msg
    2. Pega este script. Usa la sintaxis de sed de macOS (sed -i ''), así que aplica solo en Mac:

      #!/bin/bash
      
      # Extract the current branch name
      # Extrae el nombre de la rama actual
      BRANCH_NAME=$(git symbolic-ref --short HEAD 2>/dev/null)
      
      # Exit if we are not on a branch (e.g., detached HEAD)
      # Sale si no estamos en una rama (ej. HEAD desprendido)
      if [ -z "$BRANCH_NAME" ]; then
        exit 0
      fi
      
      # Regex to extract Ticket ID (e.g., CELC-4000)
      # Regex para extraer el ID del ticket (ej. CELC-4000)
      TICKET_ID=$(echo "$BRANCH_NAME" | grep -oE "[A-Z]+-[0-9]+")
      
      # If TICKET_ID exists and is not already in the commit message
      # Si existe el TICKET_ID y no está ya en el mensaje del commit
      if [ ! -z "$TICKET_ID" ] && ! grep -q "$TICKET_ID" "$1"; then
          # In macOS, sed -i requires an empty string for the extension argument
          # En macOS, sed -i requiere un string vacío para el argumento de extensión
          sed -i '' "1s/^/[$TICKET_ID]-/" "$1"
      fi
    3. Dale permisos de ejecución:

      chmod +x .git/hooks/prepare-commit-msg

    Verificación

    En una branch llamada HRIS-1234-validacion-email, haz un commit con el mensaje feat agrega validación de email. Deberías ver el ID antepuesto:

    [HRIS-1234]-feat agrega validación de email

    Relacionado