Guía de Git de Beej
(beej.us)- Es una página de guía que ofrece distribuciones en HTML y PDF en varios formatos para lectores que quieren aprender Git o consultarlo como referencia
- La guía en sí parte de la premisa de que puede contener errores, y acepta sugerencias de corrección por correo electrónico para contenido incorrecto sobre Git
- Las distribuciones HTML se pueden elegir según el entorno de lectura: versión dividida, página única, widescreen, ZIP, etc.
- Los PDF se pueden descargar en combinaciones de US Letter y A4, una o dos caras, con resaltado de sintaxis o en blanco y negro
- Traductores y autores pueden clonar todo el material desde GitHub y trabajar siguiendo el README
Formatos de distribución para lectura
-
HTML
-
PDF
Sugerencias de corrección y material fuente de trabajo
- La guía deja abierta la posibilidad de que haya errores, y las sugerencias de corrección se reciben por correo electrónico
- Traductores y autores pueden clonar el repositorio de GitHub y seguir el README
1 comentarios
Opiniones en Hacker News
Si encuentran algún error, súbanlo. Lo revisaré y lo corregiré yo mismo — Beej
:cq. Permite salir con un estado de salida distinto de cero, para que Git no pueda completar el commit o la operaciónEn https://beej.us/guide/bggit/html/split/branches-and-fast-for... dice que “la rama predeterminada es main” y que “antes era master, y los repositorios antiguos todavía tienen master”, pero eso no es correcto. Git sigue usando
mastercomo valor predeterminado, y solo permite cambiarlo para futurosgit initcongit config --global init.defaultBranchFuente: https://github.com/git/git/blob/bc204b742735ae06f65bb20291c9...
Además, la expresión “repositorios antiguos” transmite un mensaje equivocado. GitHub decidió este cambio y otros lo siguieron, y Git en sí pasó a permitir la configuración mencionada; no es una cuestión de repositorios nuevos o antiguos, sino más bien de preferencia
Es una buena forma de mantener las ramas sin enredarse entre sí, sin la molestia de lidiar con stash
Beej's Guide to Network Programming y Beej's Guide to Unix IPC, que leí cuando era adolescente, eran accesibles pero también profundos, e influyeron mucho en el tipo de programador en el que me convertí después
[0] https://beej.us/guide/bgnet/
[1] https://beej.us/guide/bggit/
Compré usado Slackware Linux Unleashed con un CD-ROM incluido; traía ejemplos de networking en C, y como ese código me confundía terminé encontrando el sitio de networking de Beej. Ahí me enganché más y me fui metiendo en una madriguera profunda, recorriendo varias librerías en busca de libros de programación
Después de comprar el excelente libro de referencia de Richard Stevens, ya no hubo vuelta atrás, y hasta hoy le agradezco a Beej por haber hecho posible esa pasión
select, quería hacer más rápido un escáner de puertos (¿quizá “grabb”?) y traduje al italiano la guía de redes de Beej. Eran buenos tiemposEran los tiempos en que guardaba las páginas para leerlas sin conexión y que mi papá no se enojara por la cuenta del teléfono; cuando el código funcionaba, se sentía como una validación que superaba los fracasos y rechazos anteriores de la vida. Era enorme la alegría de enviar un mensaje de una computadora a otra
Al ver “comando antiguo:
git checkout”, ni siquiera sabía que existíagit switch, ni quegit checkoutse considerara una alternativa antigua. Me siento viejoEmpecé a aprender Git hace casi 10 años, así que supongo que tiene sentido, pero se siente raro pensar que alguien que aprende Git hoy podría confundirse por qué uso
git checkout. Es como hablar con expresiones pasadas de modaVolviendo al texto, creo que esta guía me habría sido realmente útil cuando estaba aprendiendo. Es fácil de seguir y cubre bien las preguntas comunes
También recuerdo con cariño cuando me asusté con mi primer conflicto de merge, me detuve y luego busqué rodeos para evitar conflictos
git switches un comando bastante nuevo y se lanzó por primera vez en 2019Hay discusiones de 2021 y de hace unas semanas, respectivamente, y en la segunda también se menciona que, según la documentación,
git switchtodavía se considera una función experimentalhttps://news.ycombinator.com/item?id=28024972
https://news.ycombinator.com/item?id=42649858
git checkouttodavía se considere una “alternativa antigua”. La última vez que revisé,switchseguía siendo experimental, y nunca se me ocurrió apartarme del flujo de trabajo y los comandos que aprendí cuando empecé con Git hace unos 15 añosTodo lo que quiero hacer sigue funcionando igual,
git checkoutsigue haciendo lo mismo de siempre, y no tengo problemas para colaborar con otras personas usando Git; entonces, ¿para qué cambiar mi flujo de trabajo?El solo hecho de que haga falta una guía de más de 30 partes para explicar cómo usar Git hace sentir que Git se perdió el panorama general.
Un commit es una instantánea de un árbol y tiene una lista de ancestros. Normalmente es uno, pero no siempre. Una etiqueta es un rótulo inmutable para un commit, y una rama es un rótulo mutable para un commit. El índice es un pequeño protocommit en progreso que se llena con
addantes de hacer commit.Eso es Git. Si quieres saber más, no leas una guía: busca cosas como “cómo cambiar a un commit específico de Git sin afectar el árbol”, “cómo hacer commit solo de algunos de los archivos modificados” o “cómo copiar un commit de otro lugar al árbol actual”.
La abstracción básica es minimalista y fácil. Lo sofisticado y complejo es lo que quieres hacer con esa abstracción. Aprende lo primero y busca lo segundo; no hace falta leer una guía.
git clone,git checkout,git pull,git add+commit+push,git reset/rebase.rebase -itrae indicaciones sobre qué hace cada comando, y explicar cómo formatear la salida degit logsegún tus gustos y compromisos toma unos cuantos párrafos. Normalmente considero que los comandos de usuario incluyen también cosas bastante variadas comogit gc,git fsckygit rev-parse.Los comandos de bajo nivel definitivamente son más crípticos, y por sí mismos hacen muchas cosas que no siempre son fáciles de hacer con comandos de usuario optimizados para casos de uso comunes.
En resumen, Git es grande, incluso enorme, pero para la mayoría de los desarrolladores una parte considerable de lo que ofrece está bastante lejos del camino principal.
Lo aterrador es que la guía sea tan larga.
Sé que las guías de Beej suelen ser exhaustivas, pero no había dimensionado de verdad la enorme cantidad de sutilezas de Git hasta ver esto.
Con Jujutsu, siento que sería una guía mucho más delgada o, al menos, una que la gente podría ir descubriendo y aprendiendo con más facilidad.
Siento que esta guía cubre apenas alrededor del 10% de Git, pero espero que cubra el 90% del uso común.
En el trabajo, una o dos veces al año doy un curso de 2 horas de introducción al modelo de datos de Git.
Entramos literalmente al directorio
.git, descomprimimos archivos y muestro que todo es solo una representación en texto plano de las estructuras de datos básicas. Es realmente genial ver el momento en que a la gente le hace clic en la cabeza.Compartimos un documento con recetas básicas de Git para que los recién ingresados empiecen a hacer commits de código, pero la mayoría solo las sigue sin entender qué está pasando.
En cambio, quienes toman la clase, aunque no conozcan todos los comandos, obtienen una comprensión operativa bastante razonable de lo que realmente ocurre en Git. Los comandos se pueden buscar fácilmente, así que si el modelo mental es correcto, los comandos en sí no son gran problema. Aun así, casi todas las discusiones sobre Git en HN terminan hablando de la línea de comandos.
Curiosamente, esta clase suena parecida al texto alternativo de https://xkcd.com/1597/. La diferencia es que, para un público técnico, esa sí es realmente la forma correcta de enseñar Git, y una vez que lo entiendes te llevas una comprensión fundamental que no olvidas.
Honestamente, el retorno por el tiempo invertido es tan alto que me parece raro no hacerlo.
En la última diapositiva de la presentación puse preguntas para que mis colegas respondieran basándose en el modelo de datos de Git. Por ejemplo: “¿se puede mover un commit a otra rama?” y “¿qué garantiza que no haya ciclos en el grafo de commits?”.
Fue muy satisfactorio ver que la gente no se quedó solo en usar Git, sino que empezó a pensar en Git.
Por suerte, al principio vi un video que explicaba parte del modelo interno de Git, y descubrí que en la práctica no hace falta tener un conocimiento interno tan grande ni tan profundo para marcar una gran diferencia. Con saber quizá un 5% de cómo funciona Git, entendí mucho mejor qué hacen los comandos y cómo usarlos.
Si está basado en material público y lo bastante conciso como para caber en 2 horas, estaría bueno que lo compartieras en este hilo o como artículo en HN. Creo que, sobre un mismo tema, mientras más recursos de aprendizaje haya con distintas premisas, analogías y enfoques, mejor.
Sé manejar hasta cierto punto el flujo general de Git, merges, rebases, etc., pero en vez de intentar mejorar en Git estoy considerando seriamente pasarme a jujutsu.
jjes compatible con Git, y puedo usarlo solo yo mientras mis compañeros siguen usando Git.Siento que hay un truco que muchas guías y la mayoría de las GUI de Git pasan por alto. Como excepción, magit lo maneja bien
Se trata de configurar la rama upstream no como
origin/feature/foodefeature/foo, sino como el destino al que se quiere fusionar, es decir, la rama de integraciónmasteruorigin/masterEsto simplifica muchas cosas. Al ejecutar
git status, te dice cuánto te has desviado de la rama de integración, lo cual es útil, y si ejecutasgit rebasesin argumentos, hace el rebase directamente sobre el upstreamTener
origin/feature/foocomo upstream es menos útil. Los desarrolladores, por lo general, también “poseen” su propia rama remota, así que no importa mucho cuánto se desviaron de ella, y tampoco suele haber motivo para querer hacer rebase sobre ellaSi configuras
push.defaultcomo"current",git pushtambién empujafeature/fooaorigin/feature/foocomo se esperaríaMe pregunto por qué esta configuración no es más común
En la sección de colaboración no se tratan para nada las ramas de funcionalidad. Me parece que es una forma de trabajo bastante común
Sería útil contrastarla con el enfoque de la guía de “que cada quien use su propia rama”. Además, en la sección 17 valdría la pena cubrir la forma de reutilizar ramas para pull requests de GitHub y la de crear una rama nueva por cada PR
Todavía no revisé el artículo, pero parece bueno. Otra recomendación es el curso de Git de boot.dev, impartido por Primeagen
Es interactivo y profundiza hasta el nivel de manipular directamente archivos dentro del directorio
.git. Después de tomar ese curso, me quedó un modelo mental completamente nuevo de cómo funciona Git