Table of contents
Introducción
Soy de las personas que siempre ando buscando "hacks" para simplificar mi trabajo y eliminar tareas repetitivas, si eres como yo, espero que este tutorial te ayude en tu día a día.
Git Aliases
Antes de entrar en suelo de los git commands
, es importante que entendamos que la mayor parte de necesidades se pueden solucionar utilizando git aliases
por ejemplo dentro de mi .gitconfig
tengo el siguiente alias:
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
Lo que me permite es generar una salida de parecida a esta:
Git Commands
Existen ciertas tareas que se tornan más complejas y que resulta ser mejor crear un comando en lugar de un alias.
La forma de trabajar de git
es que cada vez que ejecutas git commit
a su vez ejecuta un archivo binario o script llamado git-commit
; si ejecutas git branch
este a su vez ejecuta el archivo con nombre git-branch
.
¿Dónde están ubicados todos estos archivos?
Si deseas visualizar donde se almacenan estos archivos debes de ejecutar en tu terminal:
cd $(git --exec-path) && ls
Obtendrás algo parecido a esto:
Creando nuestro propio comando
Vamos a crear un comando que nos permita renombrar
una branch local y remota. Es posible que exista una mejor forma de hacerlo, pero a manera didáctica usaremos este caso como ejemplo para construir nuestro script.
Paso 1: Crear los pasos a ejecutarse en el script
Los pasos que nuestro script deberá seguir, son:
- Crear una nueva branch a partir de la branch actual y que utilice el nuevo nombre.
- Publicar la nueva branch en el remoto.
- Eliminar la branch actual en el remoto.
- Eliminar la branch actual en el local.
Paso 2: Creando el archivo
El nombre de nuestro archivo deberá tener la siguiente nomenclatura git-nombre-de-mi-comando
, por lo que utilizaré git-rename
para que pueda ejecutar git rename branch_nueva
.
Paso 3: reando un menú de ayuda sobre el comando.
#!/bin/sh
# File: git-rename
USAGE='[help]'
LONG_USAGE='git rename help
Muestra el mensaje de ayuda
git rename nombre_nuevo
Elimina la branch actual y crea una nueva apartir de la misma en local y remoto.'
OPTIONS_SPEC=
. git-sh-setup # Documentación https://git-scm.com/docs/git-sh-setup
El scriptlet git sh-setup
está diseñado para ser obtenido (usando .
) por otros scripts de shell para configurar algunas variables que apunten a los directorios normales de Git y algunas funciones auxiliares de shell.
Paso 4: Creando la función a invocar
Crearemos la función rename_branch
que hace lo siguiente:
- Crea una variable
currentBranch
que tiene como valor el nombre de la branch actual. - Imprime un mensaje de que renombrará la branch por el primer argumento que recibe la función
Ejecuta los pasos que creamos en el paso 1.
rename_branch () { declare currentBranch=$(git symbolic-ref --short HEAD); echo "Renombrando branch $currentBranch por $1" git checkout -b $1 && git push --set-upstream origin $1 && git push origin --delete $currentBranch && git branch -D $currentBranch echo $1; }
Paso 5: Mostrando mensaje de ayuda o invocando la función
Cada vez que se ejecute este archivo, debemos de capturar el números de argumentos que hemos recibido, en caso no venga ninguno, mostraremos el mensaje de ayuda.
Si viene al menos un argumento, capturaremos el valor y revisaremos si es help
para mostrar el mensaje de ayuda, caso contrario invocaremos la función de rename_branch
con el valor.
case "$#" in
0)
usage ;;
*)
cmd="$1"
shift
case "$cmd" in
help)
git rename -h ;;
*)
rename_branch "$cmd" ;;
esac
esac
Paso 6: Guardando el archivo
Guarda el archivo en la ruta que obtuviste con git --exec-path
y cambiale el permiso para que sea ejecutable con chmod +x ./git-rename
Script final
Este sería el script final:
#!/bin/sh
# File: git-rename
USAGE='[help]'
LONG_USAGE='git rename help
Muestra el mensaje de ayuda
git rename nombre_nuevo
Elimina la branch actual y crea una nueva apartir de la misma en local y remoto.'
OPTIONS_SPEC=
. git-sh-setup
rename_branch () {
declare currentBranch=$(git symbolic-ref --short HEAD);
echo "Renombrando branch $currentBranch por $1"
git checkout -b $1 && git push --set-upstream origin $1 && git push origin --delete $currentBranch && git branch -D $currentBranch
echo $1;
}
case "$#" in
0)
usage ;;
*)
cmd="$1"
shift
case "$cmd" in
help)
git rename -h ;;
*)
rename_branch "$cmd" ;;
esac
esac
Espero que este pequeño tutorial te brinde las posibilidades de automatizar tu día a día.