DEV Community

Cover image for Domina Bash con ejemplos prácticos de Git
Israel Oña Ordoñez 🚀
Israel Oña Ordoñez 🚀

Posted on

Domina Bash con ejemplos prácticos de Git

📝 TL;DR

Bash es un lenguaje de scripting utilizado en sistemas tipo Unix para automatizar tareas. Aprende a usarlo mientras automatizas operaciones de Git con un script que te permitirá realizar commits, push, cambiar de ramas y más, ahorrando tiempo y esfuerzo en tu flujo de trabajo diario.

 

🤔 ¿Por qué aprender Bash?

Bash es un lenguaje de scripting utilizado en sistemas tipo Unix para automatizar tareas. Su capacidad para ejecutar comandos del sistema y manipular archivos de forma sencilla lo convierte en una herramienta esencial para optimizar operaciones diarias.

Como caso práctico aprenderás a automatizar operaciones rutinarias de Git con Bash, como realizar commits, push, cambiar de ramas y más, mostrando cómo puedes ahorrar tiempo y esfuerzo en tu flujo de trabajo diario.

 

🔑 Conceptos básicos de Bash

Shebang (#!/bin/bash): Indica que el archivo debe ser ejecutado con Bash.

Variables: Almacenan valores y se acceden con $.

VARIABLE="Hello World"
echo $VARIABLE
Enter fullscreen mode Exit fullscreen mode

Funciones: Bloques de código reutilizables.

function greeting() {
  echo "Hi!"
}

greeting
Enter fullscreen mode Exit fullscreen mode

Condicionales (if, else): Ejecutan comandos basados en condiciones.

if [ "$USER" == "root" ]; then
  echo "You are root"
else
  echo "You are not root"
fi
Enter fullscreen mode Exit fullscreen mode

Bucles (for, while): Repiten comandos hasta que se cumpla una condición.

for i in {1..5}; do
  echo "Number: $i"
done

while [ $i -le 5 ]; do
  echo "Number: $i"
  ((i++))
done
Enter fullscreen mode Exit fullscreen mode

 

⚙️ Git Helper Script

Script: git-helper.sh

#!/bin/bash

show_menu() {
  echo "==================================="
  echo "          Git Helper Script        "
  echo "==================================="
  echo "1) Perform git pull"
  echo "2) Create a new branch"
  echo "3) Switch to an existing branch"
  echo "4) Add files and commit"
  echo "5) Show repository status (git status)"
  echo "6) Push to the current branch"
  echo "7) Show commit history (git log)"
  echo "8) Exit"
  echo "==================================="
}

git_pull() {
  echo "Performing git pull..."
  git pull
}

create_branch() {
  read -p "Enter the name of the new branch: " branch_name
  if git branch --list | grep -q "$branch_name"; then
    echo "Error: The branch '$branch_name' already exists."
    return
  fi

  echo "Creating and switching to branch $branch_name..."
  git checkout -b "$branch_name"
}

switch_branch() {
  branches=$(git branch)
  if [ -z "$branches" ]; then
    echo "No branches available in this repository."
    return
  fi

  echo "Available branches:"
  echo "$branches"

  read -p "Enter the name of the branch you want to switch to: " branch_name
  if ! git branch --list | grep -q "$branch_name"; then
    echo "Error: The branch '$branch_name' does not exist."
    return
  fi

  echo "Switching to branch $branch_name..."
  git checkout "$branch_name"
}

git_commit() {
  while true; do
    git status

    read -p "Which files do you want to add? (use . for all or 'exit' to cancel): " files
    if [[ "$files" == "exit" ]]; then
      echo "Operation canceled."
      return
    fi

    git add "$files"

    read -p "Enter the commit message: " commit_message
    git commit -m "$commit_message"
    echo "Commit completed."
    break
  done
}

git_status() {
  echo "Showing repository status..."
  git status
}

git_push() {
  echo "Pushing to branch $branch..."
  git push origin "$branch"
}

git_log() {
  echo "Recent commit history:"
  git log --oneline --graph --decorate -10
}

check_git_repo() {
  if [ ! -d .git ]; then
    echo "Error: This does not appear to be a Git repository."
    exit 1
  fi
}

main() {
  check_git_repo

  while true; do
    show_menu
    read -p "Select an option: " choice
    case $choice in
      1) git_pull ;;
      2) create_branch ;;
      3) switch_branch ;;
      4) git_commit ;;
      5) git_status ;;
      6) git_push ;;
      7) git_log ;;
      8) echo "Exiting..."; exit 0 ;;
      *)
        echo "Invalid option. Please try again."
        continue
        ;;
    esac
    break
  done
}

main
Enter fullscreen mode Exit fullscreen mode

Resultado:

Ejecución del script

Ejecución:

  1. Guarda el script como git-helper.sh y hazlo ejecutable:

    chmod +x git-helper.sh
    
  2. (Opcional) Colócalo en un directorio que esté en tu PATH (por ejemplo, /usr/local/bin) para usarlo globalmente:

    mv git-helper.sh /usr/local/bin/git-helper
    
  3. Ejecútalo:

    git-helper
    

 

🛠️ Paso a paso

Paso 1: Crear un menú principal

El primer paso es crear un menú principal con las opciones disponibles.

show_menu() {
  echo "==================================="
  echo "          Git Helper Script        "
  echo "==================================="
  echo "1) Perform git pull"
  echo "2) Create a new branch"
  echo "3) Switch to an existing branch"
  echo "4) Add files and commit"
  echo "5) Show repository status (git status)"
  echo "6) Push to the current branch"
  echo "7) Show commit history (git log)"
  echo "8) Exit"
  echo "==================================="
}
Enter fullscreen mode Exit fullscreen mode

Explicación:

  • Utilizamos echo para mostrar mensajes en la consola.
  • El menú se muestra con las opciones disponibles.

 

Paso 2: Validar si es un repositorio Git

Antes de realizar cualquier operación de Git, es importante verificar si el directorio actual es un repositorio Git.

check_git_repo() {
  if [ ! -d .git ]; then
    echo "Error: This does not appear to be a Git repository."
    exit 1
  fi
}
Enter fullscreen mode Exit fullscreen mode

Explicación:

  • Verificamos con -d .git si existe un directorio .git en el directorio actual.
  • Si no es un repositorio Git, mostramos un mensaje de error y salimos del script con exit 1 (código de error).

 

Paso 3: Crear funciones para las operaciones de Git

Cada función realiza una operación específica de Git. A continuación, se muestran algunas de las funciones disponibles:

Crear una nueva rama

create_branch() {
  read -p "Enter the name of the new branch: " branch_name
  if git branch --list | grep -q "$branch_name"; then
    echo "Error: The branch '$branch_name' already exists."
  fi

  echo "Creating and switching to branch $branch_name..."
  git checkout -b "$branch_name"
}
Enter fullscreen mode Exit fullscreen mode

Explicación:

  • Con read -p leemos la entrada del usuario para el nombre de la nueva rama y almacenamos el valor en branch_name.
  • Usamos git branch --list para listar las ramas existentes y grep -q para buscar si la rama almacenada en branch_name existe en la lista.
    • Si la rama ya existe, mostramos un mensaje de error y salimos de la función.
  • Si la rama no existe, creamos y cambiamos a la nueva rama con git checkout -b.

 

Cambiar a una rama existente

switch_branch() {
  branches=$(git branch)
  if [ -z "$branches" ]; then
    echo "No branches available in this repository."
    return
  fi

  echo "Available branches:"
  echo "$branches"

  read -p "Enter the name of the branch you want to switch to: " branch_name
  if ! git branch --list | grep -q "$branch_name"; then
    echo "Error: The branch '$branch_name' does not exist."
    return
  fi

  echo "Switching to branch $branch_name..."
  git checkout "$branch_name"
}
Enter fullscreen mode Exit fullscreen mode

Explicación:

  • Almacena las ramas existentes en la variable branches.
  • Con -z verificamos si la variable branches está vacía.
    • Si no hay ramas disponibles, mostramos un mensaje y salimos de la función.
  • Mostramos las ramas disponibles y leemos la entrada del usuario para la rama a la que desea cambiar.
  • Usamos git branch --list y grep -q para verificar si la rama existe.
    • Si la rama no existe, mostramos un mensaje de error y salimos de la función.
  • Cambiamos a la rama seleccionada con git checkout.

 

📂 Repositorio del proyecto

Para seguir este ejemplo de automatización de operaciones de Git con Bash, puedes clonar o explorar el repositorio asociado.

Repositorio: https://github.com/israoo/git-helper-bash

Este repositorio contiene:

  • Script git-helper.sh con las funciones para automatizar operaciones de Git.
  • Instrucciones detalladas en el archivo README.md sobre cómo configurar y ejecutar el script paso a paso.

 

🔗 Referencias/Extras

 

🚀 ¿Qué sigue?

¿Ya estás usando git tags o submódulos? Agrega estas funcionalidades a tu script para mejorar aún más tu flujo de trabajo con Git. ¡Coméntalo y comparte tus ideas!

 

Top comments (0)