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.
Preguntas frecuentes
¿Qué es GitHub?
Un sitio donde se alojan repositorios de Git, con herramientas encima para revisar cambios, discutirlos y publicar. Es donde vive la mayor parte del código abierto del mundo.
¿GitHub es gratis?
Sí para repositorios públicos y privados de uso normal. Lo que se paga son funciones de organización y minutos de automatización.
¿Cómo subo un proyecto a GitHub?
Creas el repositorio vacío en la web, lo conectas con git remote add origin y empujas con git push. El primer push pide identificarte.
¿Sirve GitHub como portafolio?
Sí, y es de lo que más se mira en datos. Un repositorio con un análisis ordenado y un README que explique qué hace vale más que un certificado.
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 de un clic y no hay que instalar nada. Donde veas %%revisa, escribe tu respuesta y el cuaderno te dice si te salió.
¿Prefieres trabajar en tu máquina? Bájate el cuaderno de práctica o el de soluciones. Todos están también en github.com/soymissyera/MissYeraEjercicios.