El pasado 24 de octubre estuve en el Super Happy Dev House, 2009 que se realizó en el CESUN de El Lago.
Además de estar presente para escuchar otras pláticas, yo me apunté a una para presentar sobre Git.
El objetivo de la plática era dar a conocer a Git como un sistema distribuído de control de versiones, y tratar de demostrar su funcionamiento con un ejemplo.
Si bien la parte de la plática salió bien y las primeras muestras en proyección funcionaron, la demostración en la maqueta no salió como esperaba.
Fuera de que lo que llevaba como servidor se puso a hacer un fsck a la hora de levantar el lab y que hubo que levantar una red alterna porque los peers no se veían entre ellos, lo que realmente mató la demostración fue que olvidé el asunto de los permisos. Al no tener los usuarios permisos para leer los repositorios unos de otros, la demostración se convirtió en un ejemplo de VCS centralizado.
Realicé varios clones, uno de otro y con otro usuario para cuidar los accesos a la laptop. Para cuando todos clonaron del repositorio compartido, estúpidamente perdí rastro del árbol de repositorios generados. Pero en fin, estaba logrando recuperar camino, cuando…
Debido a que todos clonaron de mi repositorio –que tenía una working copy, es decir, que no era un repositorio bare— cuando quisieron darle git push
sólo Alex pudo enviar sus cambios y ocurrió lo que tenía que pasar:
- Que a los demás les apareció un mensaje sobre las «refs» que rápidamente se resolvió con
git pull
- Una vez realizado el pull, git les comenzó a rechazar el push, debido a que mi copia local estaba «sucia», es decir, que no correspondía con la última versión del HEAD.
Esto lo he resuelto múltiples veces con git reset --hard
pero por algún motivo que desconozco, nunca pensé en forzar mi copia local a la versión actual de HEAD. Y aún si lo hubiera hecho, era demasiado tema para una sola sesión explicar git reset
.
Algunos tuvieron conflictos y no pudieron realizar el git pull necesario para preparar el git push. Yo me preguntaba por qué tenían conflictos, y entre las tantas cosas que estaba tratando de resolver simultáneamente, el laboratorio me rebasó.
Afortunadamente, la parte conceptual quedó cubierta, algunos lograron instalar Git y ejecutar algunos de sus comandos.
Yo siento que quedé debiendo, así que he preparado un ejemplo que podrán leer y seguir con toda calma.
Se trata de una serie de acciones realizadas con Git afectando cuatro repositorios para demostrar la naturaleza distribuída de este gran manejador de versiones.
Hagan clic en la imagen para entrar a una tabla con cuatro columnas. Cada columna pertenece a los comandos ejecutados en un repositorio. Verticalmente es una línea de tiempo.
Si ustedes siguen todo el laboratorio en orden, los repositorios les quedarán de la siguiente manera:
Pingback: Tweets that mention alvarezp » Blog Archive » ¿Qué falló durante mi plática en el SHDH, 2009? -- Topsy.com
Pus para que no me extrañes aqui te dejo un comentario.
No asisti a la platica, sin embargo veo que hubo un problema con los permisos para que GIT funcionara correctamente, no es por nada pero… QUE PASO? por que no te diste cuenta antes?
XD
Eso no debio suceder (http://blog.alvarezp.org/2008/09/16/que-fallo-durante-mi-platica-en-el-sfd2008/)
Por otro lado, excelente explicacion con las graficas, hemos pasado horas para que yo aprenda GIT y creo que con esa tabla y la grafica entendi mucho de lo que me faltaba.
Ah y creo que tienes un typo.
«ejemplo de VCS centralizado»
Estuvo hardcore tu presentacion man, y viva que ya no hay suma de numeros 😀
lo que nunca falta es el sol… bien dijiste te sigue a todas partes, esta vez no fue la excepcion…. afortunadamente se pudo mover el proyector
@Alfredo: jajaja, no lo sé; aunque el problemas de permiso que ocurrió en 2008 fue diferente a este. Un día me voy a sacar esa espina. Al menos me ha quedado la experiencia.
En cuanto a aprender Git, yo mismo pulí algunas cosas haciendo esa tabla. Me he dado cuenta de que las versiones más nuevas son más amigables desde el punto de vista que contienen muchos «warnings» para los problemas comunes. De hecho, el de «git reset –hard» está explicado en uno de los warnings de «git push», precisamente.
(Y «VCS» está correcto: Versioning Control System)
@Stan: malas noticias, man, estoy volviendo a recibir spam. Los malditos robots son cada vez más avanzados. 🙁
@Alex: sí, la verdad es que no me salvo, pero lo bueno es que el Sol no fue impedimento para tener una estupenda y agradable audiencia.