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ón | Qué te llevas | ¿Se puede actualizar? |
|---|---|---|
| HTTPS | Todo, con historia | Sí, con git pull |
| SSH | Todo, con historia | Sí, y sin pedir nada |
| GitHub CLI | Todo, pero necesita otro programa | Sí |
| Download ZIP | Los archivos de hoy | No |
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 pulldentro de la carpeta- Descargo el ZIP nuevo y reemplazo los archivos
git cloneotra 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.