La pregunta que más me hacen no es cómo usar Git. Es esta, tal cual la recibí en LinkedIn: "he visto varios desarrollos compartidos en GitHub pero todavía me cuesta entender cómo instalarlos y cómo aprovecharlos".
Y la respuesta empieza por deshacer una confusión, porque casi todo el mundo llega pensando que Git y GitHub son la misma cosa con dos nombres 🙃
El programa y la página
Piensa en tu teléfono. La cámara es un programa que funciona sin internet: tomas fotos, las miras, las borras. Google Fotos es un sitio donde dejas una copia para tenerlas a salvo y para compartirlas.
Git es la cámara. GitHub es Google Fotos.
| Git | GitHub | |
|---|---|---|
| Qué es | Un programa en tu máquina | Una página web |
| Internet | No hace falta | Sí |
| Quién lo hizo | Linus Torvalds, 2005 | Una empresa, hoy de Microsoft |
| Para qué sirve | Guardar la historia de tu proyecto | Tener una copia fuera y compartirla |
| Se puede cambiar | No hay otro Git | GitLab, Bitbucket, Codeberg |
Esa última fila importa más de lo que parece: tu repositorio no está atado a GitHub. Es una carpeta con una carpeta oculta dentro, y la puedes copiar a donde quieras 🧳
Un repositorio no sabe que GitHub existe
Vamos a armar el proyecto de ventas otra vez, como en el capítulo 3, y a preguntarle si conoce a alguien:
mkdir ventas-miss-yera cd ventas-miss-yera git init -q printf 'ciudad,monto\nLima,1200\nArequipa,890\n' > ventas.csv git add ventas.csv git commit -q -m "Primeras ventas de Lima y Arequipa" git remote -v echo "(arriba no salió nada, y eso es lo normal)"
(arriba no salió nada, y eso es lo normal)
git remote -v lista los sitios de fuera que este repositorio
conoce. No salió nada porque no conoce ninguno: es un proyecto perfectamente
sano que vive solo en tu máquina 🏠
Qué pasa si intentas subirlo así
git push
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using
git remote add <name> <url>
and then push using the remote name
git push <name>
"No configured push destination" es Git diciéndote "¿subirlo a dónde?". No es un error tuyo, es una pregunta sin respuesta.
Presentarle un remoto
Un remoto es una dirección con un apodo. El apodo casi
siempre es origin, por costumbre, y podría ser cualquier cosa.
Con una cuenta de GitHub, la línea de verdad se ve así:
git remote add origin git@github.com:tuusuario/ventas-miss-yera.git
Para practicar sin cuenta y sin internet vamos a hacer algo que además te enseña qué es GitHub por dentro: un servidor de práctica en tu propia máquina. Es una carpeta con la historia y sin archivos a la vista, que es exactamente lo que GitHub guarda de tu proyecto.
cd .. git init -q --bare servidor-de-practica.git cd ventas-miss-yera git remote add origin ../servidor-de-practica.git git remote -v
origin ../servidor-de-practica.git (fetch) origin ../servidor-de-practica.git (push)
Sale dos veces, una para traer (fetch) y otra para llevar
(push), porque en teoría podrían ser direcciones distintas. En la
práctica nunca lo son 🤝
Y ahora sí, subirlo
git push -u origin main
To ../servidor-de-practica.git * [new branch] main -> main branch 'main' set up to track 'origin/main'.
Ese -u se escribe una sola vez en la vida del proyecto. Lo que
hace es dejar apuntado que tu rama main de aquí se corresponde con
la main de allá, y desde entonces basta con escribir
git push a secas.
Fíjate en algo importante: tu commit no cambió. Subir no crea nada nuevo, copia lo que ya existía. El hash de allá y el de aquí son el mismo 🪞
git log --oneline git ls-remote origin
2a3fc36 Primeras ventas de Lima y Arequipa 2a3fc36beb5c2a9e53847d7ea23f4af29abc0159 HEAD 2a3fc36beb5c2a9e53847d7ea23f4af29abc0159 refs/heads/main
Lo que GitHub añade y Git no tiene
Si GitHub solo fuera una copia, no sería gran cosa. Lo que añade encima es la parte social, y esa parte no existe en Git:
- Issues, para pedir ayuda o reportar que algo no funciona.
- Pull requests, para proponer un cambio en el proyecto de otra persona.
- Actions, para que se ejecuten cosas solas cuando subes.
- Releases, para marcar "esta es la versión que la gente debe descargar".
- El perfil, las estrellas y todo lo que hace que un proyecto se encuentre.
Cuando alguien te dice "está en GitHub", casi siempre quiere decir "hay un repositorio de Git ahí, y encima de él hay una conversación" 💬
La trampa
Subes por fin tu proyecto de ventas a GitHub, le das a crear repositorio sin mirar mucho y publicas. Al día siguiente te escribe un desconocido preguntando por el cliente de Arequipa.
$ git push -u origin main
Enumerating objects: 12, done.
To github.com:tuusuario/ventas-miss-yera.git
* [new branch] main -> main
Qué está mal
El repositorio quedó público y el CSV con los clientes también 👀
GitHub te pregunta público o privado una sola vez, en la pantalla de crear, y viene marcado público por defecto. Nadie te lo vuelve a preguntar y el push no dice ni una palabra al respecto.
Público en GitHub no es "poco visible": es indexable por Google y rastreable por robots que buscan justo esto. Un repositorio con montos, nombres de bodegas y correos es un problema de datos personales, no un descuido.
Se puede cambiar a privado después, en Settings, pero lo que ya se copió no vuelve. La costumbre: privado primero, público cuando decidas que sí.
Comprueba que se entendió
Comprueba que lo tienes
Se cae internet toda la mañana. ¿Qué puedes seguir haciendo con tu repositorio?
- Nada, Git necesita conexión
- Todo menos subir y bajar
- Solo mirar, no puedo guardar
- Solo si antes hice push
Ejercicios
1. Pregunta a quién conoce
Crea el repositorio del catálogo de bodegas y lista sus remotos antes de configurar ninguno.
cd .. mkdir catalogo-bodegas cd catalogo-bodegas git init -q printf 'bodega,ciudad\nBodega Inti,Cusco\n' > bodegas.csv git add bodegas.csv git commit -q -m "Catalogo inicial de bodegas" git remote -v echo "sin remotos, todo normal"
sin remotos, todo normal
Un repositorio recién creado no conoce a nadie, y puede vivir así para siempre.
2. Móntale su servidor de práctica
Crea el repositorio vacío que hará de GitHub y conéctalo
con el apodo origin.
cd .. git init -q --bare bodegas-servidor.git cd catalogo-bodegas git remote add origin ../bodegas-servidor.git git remote -v
origin ../bodegas-servidor.git (fetch) origin ../bodegas-servidor.git (push)
Dos líneas con el mismo apodo: una para traer y otra para llevar.
3. Sube el catálogo
Manda la rama main al servidor y deja la
correspondencia apuntada.
git push -u origin main
To ../bodegas-servidor.git * [new branch] main -> main branch 'main' set up to track 'origin/main'.
El -u es el que hace que a partir de ahora baste
git push a secas.
4. Comprueba que allá está lo mismo
Compara el hash de tu último commit con el que tiene el servidor.
git log --oneline -1
git ls-remote origin main
a9874ae Catalogo inicial de bodegas a9874ae5ade9ebff480ec9f29629b1b651573849 refs/heads/main
El mismo hash de los dos lados. Subir copia, no transforma 🪞
5. Sube un cambio más
Agrega un minimarket de Trujillo y súbelo, ya sin escribir el destino.
printf 'Minimarket Sol,Trujillo\n' >> bodegas.csv git add bodegas.csv git commit -q -m "Entra el minimarket de Trujillo" git push
To ../bodegas-servidor.git a9874ae..4cb519a main -> main
Sin origin main detrás, porque ya quedó apuntado.
6. Cámbiale el apodo al remoto
Renombra origin a github y
comprueba que sigue funcionando igual.
git remote rename origin github git remote -v git push github main
github ../bodegas-servidor.git (fetch) github ../bodegas-servidor.git (push) Everything up-to-date
origin es solo una costumbre. Al proyecto le da lo mismo cómo
se llame 🏷️
7. Desconéctalo del todo
Quita el remoto y comprueba que el repositorio sigue entero.
git remote remove github git remote -v git log --oneline
4cb519a Entra el minimarket de Trujillo a9874ae Catalogo inicial de bodegas
Quitar el remoto no toca ni un commit. Tu historia siempre fue tuya y sigue completa 🧷
Lo que te llevas
Git guarda tu historia; GitHub guarda una copia y le pone conversación encima. Lo que conecta los dos es una sola línea.
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.