git

Bloquear commits en una rama

Comparto este útil hook de Git para bloquear commits y merges en una rama específica. Este script se lanza antes de presentarse el mensaje del commit, por lo que se puede evitar realizar commits en la rama indicada y también se pueden evitar realizar merges.

El único inconveniente es que al bloquear un merge o un commits, el directorio de trabajo se queda justo en el estado previo a lanzar el comando ‘git commit’ por lo que si se trata de un merge y nuestro directorio de trabajo siempre debe mantenerse limpio se debe realizar esta limpieza manualmente utilizando:

git reset HEAD && git checkout .

Eso hará que se deshagan todas las modificaciones existentes no comiteadas.

El archivo es prepare-commit-msg, código:

#!/bin/bash

red='\x1b[41m'
nocolor='\x1b[0m'

protected_branch='produccion'
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

if [ $protected_branch = $current_branch ]
then
    echo -e "${red}Estas en $current_branch, RAMA BLOQUEADA${nocolor}"
    read -p "¿quieres realmente hacerlo? [y/n]" -n 1 -r < /dev/tty
    echo
    if echo $REPLY | grep -E '^[Yy]$' > /dev/null
    then
        exit 0 # se ejecuta
    fi
    exit 1 # NO se ejecuta
else
    exit 0 # se ejecuta
fi

Recordad que para que funcione se debe habilitar el permiso de ejecución:

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

Más información en git-scm.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.