
¿Por qué aprender a usar Git?
Git es una de las herramientas más potentes en el desarrollo de software. Generalmente se aprende en la práctica, y pocas veces se enseña en profundidad en bootcamps o universidades. Nace de la propia necesidad de contar con una herramienta que permita simplificar la creación de software, separando el diseño de su lógica (código) y facilitando la mantención y su versionamiento.
En los años 2000, las webapps se alojaban en servidores donde el código se cargaba directamente mediante FTP, sin control de versiones ni posibilidad de trabajar con múltiples equipos. Este proceso lucia como la siguiente imagen:
En ese tiempo, los desarrolladores debían subir el código a una carpeta del servidor mediante SFTP, sin ningún tipo de seguridad. Además, si este servidor fallaba, la aplicación también se caía sin redundancia. Algunos de los problemas de esta forma de trabajar eran los siguientes:
- Difícil de mantener.
- No había separación entre el diseño y la lógica en el mismo archivo.
- No se podía escalar: un solo servidor tenía todo y no había backups.
- Si algo fallaba, todo fallaba.
- Actualizaciones manuales y lentas.
A partir de este dolor surge Git, un sistema de control de versiones que empresas como GitHub, GitLab y Bitbucket han hecho popular en el desarrollo de software.
Pero, ¿es importante saberlo?
Sí. Cualquier persona que trabaje con datos, desarrollo de software o en el mundo de la tecnología (metiendo las manos) debería saber sobre Git, especialmente GitHub, que es el más popular y que todas las empresas utilizan para almacenar, mantener y versionar sus códigos.
¿Es difícil?
No, realmente no. Casi todos los comandos e instrucciones son conocidos por los modelos de lenguaje, así que no es necesario aprendérselos de memoria, sino entender sus fundamentos y saber cómo averiguar lo que necesitas cuando tengas dudas (ya sea en la documentación o con asistentes de IA).
En base a mi experiencia, tenía ganas de mostrar las cosas que más he usado en Git: desde comandos básicos y merges, hasta CI/CD.
Comandos básicos
Antes de empezar cualquier cosa, tienes dos opciones: construir tu propio código o clonar un repositorio y comenzar desde ese punto. En este caso, el artículo mostrará la segunda opción, ya que se clonaré un repositorio creado para el ejercicio. Para esto, se debe ejecutar el siguiente comando en la terminal de tu computador:
1git clone https://github.com/Foco22/small-github-api.git
Este comando copia el repositorio remoto (de github) a tu computador local en el directorio donde se ejecuto la instrucción. Si deseas acceder a la carpeta, debes usar el comando en cd junto con el nombre de la carpeta. Después de entrar a la carpeta, normalmente se ejecuta el comando git status, que muestra el estado actual de tu proyecto de git (rama, archivos, etc).
1git status
Habitualmente, cualquier ajuste o cambio en el código se debe realizar en otro rama, así se evita modificar código que este en rama productivas. En este caso, se construyo una nueva rama llamada "feature-substract", cuyo principal objetivo es añadir otro endopoint al repositorio que permita restar dos números enteros, usando el siguiente comando:
1git checkout -b feature-substract
Este comando creará una nueva rama llamada “feature-substract” y te ubicará inmediatamente a esa rama. Si necesitas corroborar que estas en la rama correcta, puedes volver ejecutar el comando git status.
En la rama se ajustarón dos principales puntos: un endpoint que resta dos números y su esquema en la carpeta models. Estos cambios fueron los siguientes:
12@app.post("/api/subtract", response_model=SubtractResponse)3def calculate_subtract(numbers: NumbersInput):4 """5 Calculate the difference of two numbers.67 - **first_number**: The number to subtract from (minuend)8 - **second_number**: The number to subtract (subtrahend)910 Returns a JSON response with both input numbers and their difference.11 """12 result = numbers.first_number - numbers.second_number13 return SubtractResponse(14 first_number=numbers.first_number,15 second_number=numbers.second_number,16 difference=result17 )
1class SubtractResponse(BaseModel):2 """Response model for subtract calculation"""3 first_number: float = Field(..., description="The first number (minuend)")4 second_number: float = Field(..., description="The second number (subtrahend)")5 difference: float = Field(..., description="The result of the subtraction")67 model_config = {8 "json_schema_extra": {9 "examples": [10 {11 "first_number": 10.0,12 "second_number": 3.0,13 "difference": 7.014 }15 ]16 }17 }
Después de ajustar los archivos main.py y schema.py localmente, estas modificaciones se encuentra solo en mi computador, no en la rama remota. Por lo tanto, se deben llevar estos cambios a la rama remota. Esto se realiza ejecutando el comando add, mediante la siguiente expresión:
1git add .
El comando añade los cambios al staging area (área de preparación), es decir, deja los archivos listos para formar parte del próximo commit. Si deseamos realizar el commit, debemos ejecutar el siguiente comando.
1git commit -m "add substract API endpoint"
Se crea un nuevo commit, al cual se le agrega un pequeño mensaje descriptivo para que otra persona entienda de qué se trata el cambio. Si se desea realizar el cambio a la rama remota (push), se debe ejecutar la siguiente instrucción:
1git push origin feature-substract
CI/CD
El CI/CD es una práctica fundamental en el desarrollo de software que permite su integración y evolución continua. Actualmente, este enfoque se utiliza en prácticamente cualquier proyecto de software, ya que evita replicar errores en producción y ahorra tiempo a los equipos. Esto se logra desplegando cambios a distintos entornos (producción, QA, testing) sin necesidad de actualizar manualmente los servidores o recursos, sino simplemente haciendo push a la rama del repositorio remoto.
Dentro de esta practica existen dos conceptos relevantes:
- Integración continua (CI): Se encarga de revisar el código, instalar las librerías necesarias y ejecutar las pruebas automáticas.
- Despliegue continuo (CD): Se encarga de desplegar los cambios del código en los servicios o en la infraestructura de la aplicación.
Como este repositorio no está montado sobre ninguna aplicación en particular, mostraré un ejemplo de testing (CI). Sin embargo, estos archivos son simplemente instrucciones y no son muy complicados de construir, especialmente con la ayuda de agentes de IA. Es importante recordar que GitHub reconoce estos archivos solo si están dentro de una carpeta llamada .github, ubicada en la raíz del repositorio, y específicamente dentro de una subcarpeta llamada workflows.
En esta ruta deben almacenarse los archivos ci.yml y cd.yml. En este caso, el archivo ci.yml es el siguiente:
1name: Run Tests23on:4 push:5 branches: [main, feature-*]6 pull_request:7 branches: [main]89jobs:10 test:11 runs-on: ubuntu-latest12 steps:13 - uses: actions/checkout@v414 - uses: actions/setup-python@v515 with:16 python-version: "3.11"17 - name: Install dependencies18 run: |19 pip install -r requirements.txt20 pip install pytest21 - name: Run tests22 run: pytest -q23
Este archivo en simples palabras es un conjunto de instrucciones, donde principalmente se instalan librerías y se ejecutan los tests establecidos en tu programa.
Variables de entorno (secretas)
Creo que lo último que uno debería saber es que hay que tener mucho cuidado con los secretos, especialmente si se trata de credenciales de bases de datos o servicios de terceros. En este sentido, los secretos nunca deben estar hardcodeados ni almacenados en un archivo .env directamente dentro del repositorio de GitHub.
Por esta razón, estas plataformas han creado mecanismos para ingresar secretos a través de la interfaz del repositorio, evitando que personas no autorizadas puedan acceder a ellos, usándolos de forma segura durante los desarrollos del código.
En cualquier repositorio de GitHub, en la parte superior derecha, encontrarás una sección llamada Settings.
Si haces clic allí, en la sección Security, específicamente en “Secrets and variables”, encontrarás lo siguiente:
Los repository secrets son todas las claves secretas asociadas a tu repositorio, incluyendo llaves de acceso a bases de datos, credenciales de servicios, API keys, entre otras. En esta sección puedes agregar cualquier variable que sea secreta y que corresponda a conexiones o configuraciones sensibles que la aplicación.
Final
Creo que GitHub es simplemente práctica y acostumbrarse a algunos comandos de la plataforma. Siento que, para cualquier persona que trabaja en datos, es muy importante dominarlo, ya que rara vez se enseña en universidades o bootcamps, pero se piden en los trabajos conocimientos sobre estas practicas. Una buena forma de aprender es usarlo constantemente, por lo que mi mejor consejo es utilizar GitHub tanto para tus proyectos personales como en tu trabajo.
El repositorio del articulo es:
https://github.com/Foco22/small-github-api