Buenas!
La semana pasada charlabamos con Nico sobre revivir la cuestión de revisar si SVN es hoy la mejor herramienta de control de versiones para nuestros ejemplos.
La última vez que lo charlamos dijimos de mantener el statu quo, pero capaz fue una decisión apresurada (básicamente porque no nos poníamos de acuerdo sobre la forma de estructurar nuestro repositorio en algo del estilo git/hg, y porque eran las 6 de la tarde de un sábado en Medrano :P).
Entonces, la idea es charlar esto con más tiempo. Las preguntas disparadoras son:
1. ¿El SVN nos alcanza? ¿Queremos cambiar? ¿Porqué sí, porqué no?
2. Si quisieramos cambiar, ¿estaríamos de acuerdo en movernos a una herramienta descentralizada?
3. Suponiendo el uso de una herramienta como git/hg, ¿cómo estructuraríamos nuestro repositorio de ejemplos?
4. ¿Nos molestaría tener un repositorio (u organización) específica para PACO?
Personalmente, yo pienso que
1 y 2. No, yo quisiera cambiar. SVN en sus días fue la maravilla comparada con CVS, hoy después de usar git durante algunos años, la encuentro lenta y tosca. Y eso por fuera de que he trabajado bajo los modelos centralizado puro y decentralizado (híbrido, porque siempre existe un repositorio y rama principial, y ojo con divergir mucho de esta porque se pude todo), y el segundo me resulta mucho más conveniente.
Cosas que me parecen fundamentales de estas herramientas:
* Historia limpia. Dadas las herramientas de ammend y rebase que tienen, la historia resultante queda limpia y trazable (obvio, si lo usas adecuadamente).
* Si el repositorio central se cae (porque por ejemplo, te hacen la gran assembla), replicar el repositorio en otro servidor es trivial.
* Poder comitear sin conexion internet es algo que me ha salvado infinidad de veces, incluso preparando clases.
* Comitear es gratis, pushear a una rama también, incluso pushear o mershear a master (la rama principal, el trunk de SVN) es una operación simple y rápida. Esto fomenta a que la gente comitee más. Y eso me parece bueno.
* Sitios que se paran encima de git o hg como BitBucket o Github tienen un soporte interesante para pull-request, y si querés trabajar con otro esto es excelente porque podés pedir una segunda opinión antes de mergearlo.
Esto no resulta útil cuando uno trabaja completamente solo, ahí el modelo de SVN de comitea al trunk y después vemos es mejor, pero acá es lo mismo: si querés comitear y pushear derecho contra master podés. Está en vos ver cuando querés hacer "master derecho" o aplicar el modelo de branching (personalmente en el laburo el modelo de feature branch es mi default, pero acá sería mas relajado)
* Si usaramos github (no seé BitBucket), pedir cuenta educativa es trivial, lo que nos da muchos repositorios privados y sinfinin de públicos. Esto es MUY útil cuando por ejemplo hacemos los parciales de TADP, en los que Demian, Pablo y/o yo queremos hacer pruebas de concepto de nuestros enunciados, y queremos que sean privados (por motivos obvios).
Esto también nos libraría del problema de depender de un SVN hosteado por nosotros. Hoy en día, este está caido y no lo podemos usar, y XP-dev es público.
* Una boludez: estos sitios en general tienen sistemas de notificaciones por los cuales te avisan cuando en un repositorio cambia algo o alguien quiere revisar algo. A mí al menos me interesa esto, que elimina burocracia y ahorra los típicos mails del estilo "hola, cambié algo"
3. Ahora, todas no son malas con SVN. Los puntos fuertes que tiene el SVN son:
* Podés tener una estructura jerárquica. La estructura de Git/HG es plana, donde tenés un repositorio por cada proyecto (acá sería por cada ejemplo). Esto en general se resuelve con:
* Una organización: es un conjunto de repositorios. Por ejemplo, podríamos tener paco, uqbar-paco o algo así.
* una convención de nombres. Por ejemplo, un ejercicio sobre metaprogramación se podría llamar meta-<nombre-del-proyecto>
Yo sé que esto puede sonar a herejía, pero a mí me suele ser más fácil encontrar cosas buscandolas por nombre en el buscador de github que siguiendo la jerarquía de directorios de SVN que a veces lleva a ambigüedades.
* Poder bajarse todos los ejemplos juntos. No hay una forma nativa. Acá entiendo que con scripts se puede lograr (conozco varios que lo hacen, puedo aprender más al respecto). También entiendo que existen los submódulos, pero no tengo experiencia con esto.
* Permisos: SVN tiene permisos para todo el repo, que es único. Acá tenés multiples repositorios, pero podés darle permisos a los miembros de paco, con lo que lográs los mismos resultados.
4. Creo que no.
En fin, escucho sus comentarios.