edición general
158 meneos
3353 clics

¡Mierda, git! (ENG)

Git es difícil: meter la pata es fácil, y averiguar cómo solucionar tus errores es jodidamente imposible. La documentación de Git tiene este problema del huevo y la gallina en el que no puedes buscar cómo salir de un lío, a menos que ya sepas el nombre de la cosa que necesitas saber para solucionar tu problema. Así que aquí hay algunas malas situaciones en las que me he metido, y cómo finalmente salí de ellas en lenguaje sencillo.

| etiquetas: git , control de versiones
Joder, llevo años trabajando con Git y oyendo decir solo maravillas... a pesar de que a mi siempre me pareció que es farragoso en cuanto te sales de lo básico. Hace mucho que ni me atrevo a hablar mal de git por no ofender a los puristas. Me alegra descubrir que alguien más piensa igual.
#17 es que si no les sigues la corriente no es cool. No estas solo
#17 Git surgió por inconvenientes que se encontró Linus Torvalds al usar sistemas propietarios para el núcleo. No lo hizo para que lo usaras tú sino para usarlo él. Lo colgó como GPL por si otros querían usarlos y ya. Todos los sistemas de gestión de versiones suelen ser farragosos, Lyx y etckeeper lo usan como backend a efectos de control y no suele dar problemas.
#38 No se usaba subversión antes que Git en el kernel?
#53 Creo que mercurial y por cuestiones de licencia linus hizo git
#54 Casi. Usaba alguna cosa propietaria (Mercurial es libre) y Linus decidió inventar Git.
#54 Mercurial y git son coetáneos. Ambos surgieron cuando Larry McVoy se enfadó con Andrew Tridgell y se llevó su scattergories (BitKeeper).
#53 No.

Se usaba BitKeeper, y antes de eso tarballs y parches a pelo.
#53 usaba Bitkeeper, pero no era libre y la empresa que lo hacía revocó la licencia (era gratis para los desarrolladores de Linux) porque alguien hizo ingeniería inversa para haver su propio cliente.
Linus dijo "sujétame el cubata" y se picó Git en un verano con los comandos que él consideraba necesarios. Muchos comandos posteriores él reconoce no usarlos porque no los necesita en su flujo de trabajo
#80 "alguien" era Andrew Tridgell, creador de Samba.
#17 otro que lleva usando git... 14 años y sigo odiandolo, antes usabamos mercurial.

community.trinitycore.org/topic/836-info-git-commands/
Es incomprensible cómo una mierda como git ha llegado a convertirse en el omnipresente sistema de control de versiones.
Algo crítico como es la gestión de las versiones software y que tenía que ser meridianamente claro y sencillo para evitar sorpresas se convierte en un galimatías incomprensible hasta para el más avanzado.
Cualquier cagada se converte en un infierno imposible de solucionar, al final las cagadas se acumulan una tras otra para intentar solucionar la anterior, pero lejos de solucionarlo se enrrolla aún más.
#8 git va de manera increíble. No sé por qué lía tanto a la gente.

Si usas el caso base de “commit&push” ya lo tienes. El problema es cuando la gente sin leer nada se pone de juancker con los casos destructivos, que posteriormente intentan arreglar con el “mágico” force.

Git permite una flexibilidad increíble. Funciona. Solamente que hay gente muy terca con tener un historial perfecto y es cuando hacen las cosas “raras” sin saber. Como el rebase o reset —hard para solucionar el triplete de “hago cagada, subo cagada, elimino cagada”
#21 el rebase es una cosa rara para ti? Que, trabajas solo?
#26 para mí, no. Para los demás que no se han puesto a aprender git más que usándolo, sí. En muchos proyectos de mi día a día me encuentro gente que no sabe que es un comando destructivo y se cascan un git push --force tan panchos rompiendo a los compañeros. Hay muchas formas de evitarlo, pero en general es poner puertas a la gente que lo hace mal por desconocimiento.
#21 Se nota que no trabajas en un proyecto grande , GIT a pesar de estar muy bien está lejos de ser algo óptimo.

El rebase es un comando que en un proyecto medio normal se lanza varias veces cada día.
#42 Si aproximadamente un repositorio con unas 30-40 personas manteniendo no es grande, puede que no haya trabajado nunca en uno "grande".

¿Qué propondrías como alternativa a git? no se me ocurre mucho. Yo creo que si te mantienes en el "git add" y "git commit", "git pull" y "git push" vas que te matas. Luego todos los demás te permiten crear flujos tan complejos como tú quieras. Por regla general cuando tengo juniors o algún que otro vago que…   » ver todo el comentario
#48 Has relatado punto por punto lo que iba a contar de mi experiencia. Git es la leche, pero hay que estudiárselo e interiorizarlo. Si lo quieres usar con vagancia, usa un flujo fijo con los cuatro comandos base, y si algo no te sale bien o no sabes cómo arreglarlo, no toques nada y pregunta.
#42 ¿Por qué? ¿Por qué no hacer siempre merge?
#57 No siempre quieres “mergear” todos los commits en los que has estado trabajando por simple limpieza del repositorio , muchas veces son pruebas que has hecho que no aportan nada.
#21 Ya me gustaría que fuese por gente que quiere hacer chapuzas...

Muchos son casos completamente normales que nos pasan a mi y al resto de mis compañeros sin tener ninguna mala fe y con muchos años de experiencia a nuestras espaldas y que para saber como gestionarlos tienes que tirar de google y rezar para que funcione sin romper nada:

- Trabajar y commitear en la rama que no toca, ahora tienes que irte a la rama buena, aplicar los cambios y deshacer los de main.
- Cualquier cosa…   » ver todo el comentario
#8 los primeros meses es un poco infierno y confusión. Con el tiempo verás que git es la herramienta más maravillosa que existe. Git es amor. Git es vida. La verdadera salud.
#22 Quien es tu camello?
#29 Pues, por el contexto que da, yo diría que es Ramón de Pitis... pero no sabía que había pasado de robar bancos a pasar droga xD
#22 llevo 14 años usandolo y sigo odiandolo.
#8 Sencillo. Si antes usabas CVS o SVN git es un galimatías maravilloso.

Si crees que da más problemas que soluviones es porque no has trabajado con los anteriores.
#32 Linus usó CVS como referencia cuando creó Git: si CVS hacía algo, git tenía que hacer lo contrario, porque todas las decisiones de diseño de CVS fueron las equivocadas.
#10 Recuerdo en 2010 empezar a currar en una empresa en Holanda y usaban Subversion. El primer día que empiezo y me enseñan los repositorios digo "¿usáis Subversion aún? Pero por qué no usáis mejor Mercurial, o Git..." Y uno de los senior engineers empieza a gritarle a un jefecillo "you see? YOU HEAR HIM???" to cabreao porque llevaba la vida diciéndolo él xD En un par de meses habíamos metido todo en Bitbucket con Mercurial en una cuenta de empresa que hicieron.
#14 A mi subversion me gusta. Si no es mucha gente en el proyecto y depende del tipo de desarrollo, más que git
#50 Comparto tu opinión, si no es un proyecto que involucre a mucha gente me parece una opción que permite ser bastante ágil. Lo he usado durante muchos años sin mayor problema.
¿Nadie ha puesto todavía el cómic resumen?

xkcd.com/1597/
#44 Claro. Trabajando solo pocos problemas y si el equipo es pequeño twmpoco. Porque los problemas con git no son tanto por git sino por por las cosas raras que la peña hace como tener ramas muy antiguas, mantener múltiples proyectos e ir mergeandolos todos porque patatas, rebases sobre ramas públicas porque a mi me gusta así, etc, etc..

Son conflictos sociales en los que siempre pilla el último.
#47 bueno lo de “el problema es la gente no la herramienta” me suena a excusas que solemos dar los desarrolladores cuando desarrollamos software que nadie sabe usar. Es posible que algunos errores sean porque hay gente que no lo use bien, pero que git es demasiado obtuso también te lo digo.
#11 No conocía eso de Sapling. Ah, pero dice que aunque nació como un fork, ya ha evolucionado y es incompatible con HG.

Lo mejor de todo es que tiene el repositorio... en GitHub jajajjaj :troll: github.com/facebook/sapling
#12 claro, no vamos a hacer cosas raras, open source en GitHub {0x1f601}
A los bookmarks de cabeza
Si tienes que hacer un revert lo mas facil es ir al commit anterior. Copiar la carpeta (sin el .git). Borrar todo el repo de local. Volver a bajarlo. Pegar lo copiado commit y push.

Los reverts y demas por alguna razon nunca me van bien.
¿Que estoy haciendo algo mal?
Seguro, pero despues de 40 intentos y que no funcione nada, haces esto y voila, funciona. Paso de perder mas tiempo intentando comprender el porque lo demas no va.
Git es una herramienta, no un fin, asi que voy a lo pragmatico. Y funciona muy bien... mientras no la cagues.
#33
git stash
git reset --hard

Es el equivalente a mandar todos los cambios ATPC.
#10 subversión es Dios.

Sigo usando y orgulloso de ello! ;)
#37 actualizate, aunque sea a mercurial.
Bah, eso no es nada, mi peor experiencia fue que al hacer un revert luego no había forma posible de volver a meter algunos cambios del commit que revertí, ni en la misma rama ni desde otra haciendo merge, tuvo que venir un experto en git y tras 2h de análisis decirnos que para volver a meter el cambio había que hacer "reset al revert y un revert del revert", deshacer los cambios a mano y volver a meter los cambios buenos.

El problema del control de versiones es que no hay nada mejor que git (he trabajado con sourcesafe y svn previamente y git es mucho mejor)
#30 A mí me pasó algo similar, pero con el añadido de que el administrador del repo tenía restringido tocar el histórico. Ahí es donde se curten los hombres.
#35 en mi caso en un repositorio que administro solo los admins pueden hacer el rewrite.
#30 Tu problema no está mal, pero no te recomiendo probar a bajar en una copia local de Windows un commit con dos ficheros que se llamen igual salvo por alguna letra mayúscula... :palm: Para Windows son el mismo fichero, aunque no lo son.

De esa git no sabe salir solo.
#87 ainsss, windows...
#88 Poco recomendable para programar, salvo que no te quede otra.
Pues si Git te parece difícil para arreglar errores, agárrate a Mercurial.
#1 ¿hace mucho que no lo pruebas?
#3 ¿Te refieres a Mercurial? Si es así, dejé de usarlo allá por 2013... creo. Recuerdo que, al contrario que Git que te permite bajarte al barro y guarrear a bajo nivel, Mercurial no te permitía reescribir la historia. Lo que has hecho, lo has hecho. Podías revertir, pero no borrar commits ni hacer cherry-picking y cosas similares.

En el fondo es bastante más sencillo que Git, por la simple falta de opciones.
#6 Te has quedado muy atrás :-)
#7 Vaya, no me digas que usas Mercurial xD Debes ser el único que "conozco" que lo hace... Hace más de diez años que no toco proyecto alguno con HG, hasta los putos de Atlassian lo quitaron de Bitbucket...
#9 en mi curro lo usamos {0x1f601} bueno, es sapling realmente, del mercurial open source no debe quedar ya nada.
#6 En lo de bajarse al barro no creo que supere al antiguo Subversion. Recuerdo haber tenido que meterme a editar cosas directamente en los ficheros para recuperar repositorios corruptos durante fines de semana enteros por petes absurdos :wall:
Y alguna vez lo conseguimos recuperar sin saber exactamente cómo lo habíamos hecho.
#3 jaja No puedo creer lo que estás insinuando.
#1 o svn
#1 O svn!
#1 Pues recuerdo Mercurial como mucho más fácil e intuitivo, aunque la verdad es que no puedo dar ningún argumento, porque hace un porrón de años que no lo uso. No me lo voy a mirar otra vez dado que ya nadie lo usa, pero por aquel entonces me quedé con la idea de que triunfó el equivocado.
#1 A que con Clearcase gano yo!
#1 yo le llamo git fuck
Joer, qué frustrante debe ser el mundo este de control de versiones :palm:

"I've come to these steps through trial and error and lots of swearing and table flipping, and I had this crazy idea to share them with a healthy dose of levity and profanity."
Linus estaba cabreado cuando lo hizo....
#2 existe un linus no cabreado? :troll:
#4 Ese día lo estaba más, seguramente discutiera con los desarrolladores de gnome...
#24 o estaria cabreado con los de nvidia :troll:
En su momento (2010) con Git petándolo por doquier trabajé un tiempo con Perforce (2010) y ya en aquella época me pareció que este último le daba 3000 vueltas en todo al primero. Con el tiempo Git se ha vuelto omnipresente, pero desconozco el rumbo que tomó Perforce (aunque parece que se usa mucho en equipos grandes de desarrollo). Algún experto en la sala que pueda aportar un poco más de info actualizada?
#72 en eso estoy de acuerdo.
Sinceramente, creo que git es demasiado complejo para la mayoría de equipos de desarrollo en el que trabajan unas pocas personas y que trae más dolores de cabeza que otra cosa. Que SVN se ha quedado obsoleto? Y? Si para la mayoría, sobra.
#31 Uso git hasta cuando trabajo sólo.
#36 hombre, en ese caso es difícil que provoque problemas de conflicto :-)
#44 Puede trabajar desde distintos equipos...
#31 Espero que seas un troll... O un viajero en el tiempo.
#39 de verdad que opino que git añade una capa de complejidad que no siempre es necesaria para todos los equipos.
#43 hasta para funcionar yo solito en mis proyectos uso git, y con branches y haciendo rebases de vez en cuando. No entiendo la complejidad. Es un grafo de commits...

SVN es un calco del sistema de archivos en carpetas. Los tres años que lo usé recuerdo que era inflexible, lento, engorroso, y difícil para hacer merges y analizar cambios.

Poder ver los cambios que has ido haciendo rápidamente en toda la historia de un proyecto es maravilloso.
#31 svn no sirve ni hoy ni hace 20 años, tal vez git sea muy complicado, pero hay cosas intermedias como mercurial.
#31 usar git es simple como el mecanismo de un chupete. Puede que usarlo en modo avanzado, mantener una rama principal bonita y que no sea una maraña de ramas no lo sea tanto, pero si lo usas en un equipo de 2-10 personas no tiene ninguna complejidad.

Yo llevo usándolo más de una década en esas condiciones y habré hecho un revert o cosas medio complejas 2 o 3 veces en mi vida.
#0 Aunque personalmente me da igual ¿Por qué no menear la versión en español? ohshitgit.com/es

Tambien nombrar que, como se ve en la barra superior del meneo, existe una versión SFW: dangitgit.com/es. Aunque también es cierto que el que hizo la versión en español del original no se atrevió a traducir la palabra "shit" xD, así que tampoco tiene directamente "malas palabras" en español.
A mí también me parecía farragoso, pero a medida que te vas enfrentando a problemas y más problemas, le vas pillando el truquillo a los revert, reset, fence, rebase, stash, merge, clean, .gitignore, el modo interactivo y hasta el reflogs, que la mayoría no saben ni que existe. Ahí es cuando te das cuenta de lo potente que es, cuando todo se puede hacer con dos o tres comandos de línea.

La clave está en hacer commits con poquitas partes de código, para poder hacer cambios muy fáciles sin tener…   » ver todo el comentario
Interesante, pero le falta manejar local y remote. Por ejemplo:

Oh shit, I accidentally committed to the wrong branch!
# undo the last commit, already pushed, but leave the changes available
git reset HEAD~ --soft
git stash
git push origin --force
# move to the correct branch
git checkout name-of-the-correct-branch
git stash pop
git add . # or add individual files
git commit -m "your message here";
git push origin
# now your changes are on the correct branch
#82 en un proyecto en el que colaboro usamos circle CI + appveyor + acciones de github.
Git no es difícil, lo difícil es saber definir una convención en el equipo para que todos tengan claro de que manera usarlo.
Ah que recuerdos el TortoiseSVN. Por entonces, todo esto era campo, antes de las PRs colaborativas, de Jenkins y GitHub Actions.
#34 hacia tiempo que no veia a nadie mencionar a Jenkins
#73 fueron los comienzos de la integración continua y la automatización de procesos y despliegues, molaba mucho en 2012 (lo use mucho durante dos años). Hoy es bastante arcaico, es cierto, pero por entonces era muy molón investigar la API de automatización de pipelines.
OpenBSD sigue usando CVS; pero han sacado un clon de GIT llamado Game Of Trees (GOT). Es de esperar que con el tiempo migren a GIT igual en un lustro o una década.

9front (Plan9) también usa git, pero no con una sintaxis de Unix. git es un directorio seguramente montado con bind(1) en /bin y las diferentes opciones son ejecutables a lanzar:

git/clone shithub.us/vexed

Va bien en 9front, no me puedo quejar, aunque no tiene todas las opciones, para lo simple que es p9, casi se podría usar diff a pelo.
Skill issue
Yo soy muy vago y uso Gitkraken. Lo cierto es que la mayoría de los problemas que tenemos es cuando hay varias personas trabajando con el mismo fichero, arreglar conflictos es lo más complicado (aunque Gitkraken ayuda mucho)
Muy buena página, me la guardo. Yaa me habían pasado varias de esas mierdas

menéame