Logo

dev-resources.site

for different kinds of informations.

Domina Bash con ejemplos prácticos de Git

Published at
1/8/2025
Categories
bash
scripting
git
español
Author
israoo
Categories
4 categories in total
bash
open
scripting
open
git
open
español
open
Author
6 person written this
israoo
open
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!

 

bash Article's
30 articles in total
Favicon
Understanding Linux Shells: Interactive, Non-Interactive, and RC Files
Favicon
Fixing Linux Backup Sync Issues for exFAT Compatibility
Favicon
Ergonomic Pyhon Text Piping Solution for Linux Shell with pypyp and uv
Favicon
Changing the Login Shell with Security and Interactivity
Favicon
Final Bash Script Series Mastering Remote Server Management and Web App Deployment
Favicon
Writting a GH extension with AI
Favicon
Test GPIO pins on BeagleBone Black by toggling high to low
Favicon
NYP Infosec December CTF 2024 writeup!
Favicon
Building a Smart Heater Controller with Python, Docker, and Bluetooth #3
Favicon
The Complete Guide to Bash Commands
Favicon
How to Get Started with Bash Scripting for Automation
Favicon
Building a Basic Testing Framework in Bash 🐚
Favicon
Funny how, as I was writing this, I started wondering—could we make this pipeline even smarter? That’s when SonarQube came to mind. But can it even work with Bash scripts? I’d love to hear your thoughts!
Favicon
Domina Bash con ejemplos prácticos de Git
Favicon
Explaining Null Device or Black Hole Register in Vim
Favicon
A Media Server on Steroids - Walkthrough
Favicon
From FZF file preview to a browser for cht.sh to discovering the ideal solution
Favicon
Code. Battery notifier.
Favicon
🌟Simplifying User Account Management with Bash Scripting Day3🌟
Favicon
Become a Bash Scripting Pro in 10 Minutes: A Quick Guide for Beginners
Favicon
Automatically Monitor and Manage RAM Usage for Next.js Development
Favicon
Bash Script - Task Management
Favicon
Bash Your Tools
Favicon
Bash Script Series: Automating Log Analysis with Bash Script or Shell Script
Favicon
The Most Interesting Mostly Tech Reads of 2024
Favicon
🚀 Automating Process Monitoring & Restarting with Bash Scripting Day4! 🔧
Favicon
🚀 RazzShell v1.0.1 is Here: Plugin Support, Enhanced Job Management, and More! 🌟
Favicon
Step-by-Step Guide: Assigning a Namecheap Domain to DigitalOcean Hosting with Nginx
Favicon
Simplify GitHub Workflow Management with My-GitHub-Manager
Favicon
How to play a bunch of lemmings

Featured ones: