Capítulo 14 de 33 8 secciones 7 min

Bajar un proyecto y hacerlo funcionar

El botón verde, git clone y qué hacer con lo que descargaste

<strong><code>git clone</code> y la dirección del proyecto.</strong> Eso baja los archivos, la historia entera y deja apuntado de dónde vino, así que actualizar después es escribir <code>git pull</code>. El ZIP del botón verde baja solo los archivos de hoy, sin historia y sin conexión, y por eso no lo recomiendo. Después de clonar quedan dos pasos que Git no hace por ti: leer el README e instalar lo que el proyecto necesita.

Este es el capítulo que pidió aquella persona en LinkedIn: "he visto varios desarrollos compartidos allí pero todavía me cuesta entender cómo instalarlos".

Y tiene toda la razón en que cuesta, porque en GitHub hay un botón verde grande que dice Code y lo que ofrece primero es justo lo que menos conviene 🟢

El botón verde por dentro

Al pulsarlo salen cuatro opciones. Traducidas:

OpciónQué te llevas¿Se puede actualizar?
HTTPSTodo, con historiaSí, con git pull
SSHTodo, con historiaSí, y sin pedir nada
GitHub CLITodo, pero necesita otro programa
Download ZIPLos archivos de hoyNo

La regla es fácil: si vas a usar el proyecto, clona. El ZIP es para curiosear un rato y borrar.

Clonar de verdad

Para verlo funcionando sin depender de internet, primero fabricamos un proyecto y lo dejamos en un servidor de práctica, como en el capítulo 12. Ese va a hacer de "proyecto que encontraste".

mkdir analisis-ventas
cd analisis-ventas
git init -q
printf 'ciudad,monto\nLima,1200\nArequipa,890\nCusco,760\n' > ventas.csv
printf '# Analisis de ventas\n\nCalcula el total por ciudad.\n' > README.md
printf 'pandas\n' > requirements.txt
printf 'import pandas as pd\nprint(pd.read_csv("ventas.csv")["monto"].sum())\n' > total.py
git add .
git commit -q -m "Primera version del analisis de ventas"
cd ..
git clone -q --bare analisis-ventas servidor.git
echo "proyecto publicado en servidor.git"
proyecto publicado en servidor.git

Ahora hazte la idea de que servidor.git es una dirección de GitHub que te pasó alguien. Bajarlo es una línea:

git clone servidor.git mi-copia
cd mi-copia
ls
Cloning into 'mi-copia'...
done.
README.md
requirements.txt
total.py
ventas.csv

Ahí está todo. Y fíjate en el detalle que lo cambia todo: te trajiste la historia entera, no la foto de hoy.

git log --oneline
git remote -v
94953c4 Primera version del analisis de ventas
origin	/home/miss-yera/servidor.git (fetch)
origin	/home/miss-yera/servidor.git (push)

El remoto quedó apuntado solo. clone hace tres cosas de un tirón: crea la carpeta, copia el repositorio y configura origin 📦

Dónde cae la carpeta

git clone crea la carpeta dentro de donde estés parada. Si estabas en tu carpeta personal, ahí te la deja. Es el motivo número uno de "clone el proyecto y no lo encuentro".

pwd
cd ..
mkdir -p proyectos
cd proyectos
git clone -q ../servidor.git ventas
ls
pwd
/home/miss-yera/mi-copia
ventas
/home/miss-yera/proyectos

Ese nombre del final es opcional: sin él, la carpeta se llama como el proyecto. Con él, como tú quieras 📁

Los dos pasos que Git no hace

Clonar te da los archivos. No te da el programa funcionando, y aquí es donde la gente se queda mirando la pantalla.

Paso uno: leer el README. Siempre. Es el archivo que explica qué es esto y cómo se pone en marcha.

cd ventas
cat README.md
cat requirements.txt
# Analisis de ventas

Calcula el total por ciudad.
pandas

Paso dos: instalar lo que pide. Casi ningún proyecto se ejecuta tal cual: necesita librerías. El archivo que las lista se llama requirements.txt en Python, package.json en JavaScript, y siempre está en la raíz.

En Python son dos líneas, y la primera es la que casi todo el mundo se salta:

python3 -m venv .venv          # una caja aparte para este proyecto
source .venv/bin/activate      # entrar a la caja
pip install -r requirements.txt

Ese entorno virtual evita que las librerías de un proyecto se peleen con las de otro. Si nunca lo has hecho, está explicado con calma en Python desde cero 🐍

Actualizar cuando saquen algo nuevo

Aquí se ve por qué el ZIP no servía. Alguien mejora el proyecto original:

cd ../../analisis-ventas
printf 'Trujillo,1450\n' >> ventas.csv
git add ventas.csv
git commit -q -m "Entran las ventas de Trujillo"
git push -q ../servidor.git main
echo "cambio publicado"
cambio publicado

Y tú, en tu copia, te lo traes con una palabra:

cd ../proyectos/ventas
git pull -q origin main
cat ventas.csv
git log --oneline
ciudad,monto
Lima,1200
Arequipa,890
Cusco,760
Trujillo,1450
2f95f84 Entran las ventas de Trujillo
94953c4 Primera version del analisis de ventas

Trujillo apareció y la historia creció. Con un ZIP habrías tenido que descargar otro, descomprimirlo y comparar carpetas a mano 🙃

La trampa

Encuentras en GitHub una herramienta de IA que quieres probar, le das al botón verde, descargas el ZIP y lo descomprimes en tu escritorio.

$ cd ~/Escritorio/herramienta-main
$ ls -a
.  ..  README.md  requirements.txt  src

$ git pull
fatal: not a git repository (or any of the parent directories): .git
Qué está mal

El ZIP viene sin historia y sin conexión 📦

Descargar el ZIP te da los archivos de hoy y nada más: no hay .git, así que no puedes actualizar, no puedes ver qué cambió ni volver a la versión de antes. Cuando la herramienta saque una versión nueva, te toca descargar otro ZIP y comparar carpetas a mano.

Con git clone te llevas lo mismo más la historia y más el enlace al original, y actualizar es escribir git pull.

El ZIP sirve para una cosa: mirar por encima un proyecto que no piensas usar. Para todo lo demás, clonar.

Comprueba que se entendió

Comprueba que lo tienes

Clonaste una herramienta hace un mes y hoy sacaron una versión nueva. ¿Qué haces?

  • Borro la carpeta y clono otra vez
  • git pull dentro de la carpeta
  • Descargo el ZIP nuevo y reemplazo los archivos
  • git clone otra vez encima

Ejercicios

1. Publica un proyecto de práctica

Arma el catálogo de clientes y déjalo en un servidor local, que hará de GitHub.

cd ~
mkdir catalogo-clientes
cd catalogo-clientes
git init -q
printf 'cliente,ciudad,canal\nBodega Inti,Cusco,Bodegas\n' > clientes.csv
printf '# Catalogo de clientes\n\nUn CSV por canal.\n' > README.md
git add .
git commit -q -m "Catalogo inicial de clientes"
cd ..
git clone -q --bare catalogo-clientes clientes-servidor.git
echo "publicado"
publicado

Ese --bare es lo que guarda GitHub: la historia sin archivos a la vista.

2. Clónalo

Bájalo como si lo hubieras encontrado, con el nombre clientes.

git clone clientes-servidor.git clientes
cd clientes
ls
Cloning into 'clientes'...
done.
README.md
clientes.csv

Los mismos archivos, en una carpeta nueva y con nombre tuyo.

3. Comprueba que trajiste la historia

Mira el log y el remoto de la copia.

git log --oneline
git remote -v
fc01d00 Catalogo inicial de clientes
origin	/home/miss-yera/clientes-servidor.git (fetch)
origin	/home/miss-yera/clientes-servidor.git (push)

El commit original está entero y origin quedó configurado solo.

4. Lee antes de tocar

Abre el README, que es siempre el primer paso.

cat README.md
# Catalogo de clientes

Un CSV por canal.

Cuando un proyecto no tiene README, eso ya es información sobre el proyecto 👀

5. Trae una mejora del original

Agrega un mayorista de Piura en el proyecto original, publícalo y bájalo en tu copia.

cd ../catalogo-clientes
printf 'Mayorista Norte,Piura,Mayoristas\n' >> clientes.csv
git add clientes.csv
git commit -q -m "Entra el mayorista de Piura"
git push -q ../clientes-servidor.git main
cd ../clientes
git pull -q origin main
cat clientes.csv
cliente,ciudad,canal
Bodega Inti,Cusco,Bodegas
Mayorista Norte,Piura,Mayoristas

Una palabra y ya estás al día 🔄

6. Clona solo lo último

Cuando un proyecto tiene años de historia y solo quieres usarlo, se puede bajar sin el pasado con --depth 1.

cd ..
git clone -q --depth 1 clientes-servidor.git clientes-ligero
cd clientes-ligero
git log --oneline
warning: --depth is ignored in local clones; use file:// instead.
68b5ac0 Entra el mayorista de Piura
fc01d00 Catalogo inicial de clientes

Un solo commit en vez de la historia entera. Con proyectos grandes es la diferencia entre segundos y minutos ⚡

7. Clona en una carpeta que ya existe

Prueba a clonar encima de una carpeta con cosas dentro y mira qué dice.

cd ..
mkdir ocupada
printf 'algo\n' > ocupada/notas.txt
git clone clientes-servidor.git ocupada
fatal: destination path 'ocupada' already exists and is not an empty directory.

Git se niega antes de tocar nada. Es de los errores amables: te protege de pisar tu propio trabajo 🛡️

Lo que te llevas

Clonar trae los archivos, la historia y el enlace al original. El ZIP solo trae los archivos de hoy.

Practica este capítulo 📓

Todo el código de arriba en un cuaderno que corre de principio a fin, y los ejercicios con una celda vacía para que los hagas tú. Se abre en Google Colab y no hay que instalar nada.

¿Tienes alguna duda o consulta?