Linus, CVS, SVN, Perforce, GIT, Branch & Merge

Estaba mirando un video de Linus Trovalds (son 70 minutos!), hablando sobre software de control de versiones. El estilo de hablar es un poco arrogante y pedante para mi gusto, pero dice cosas con las cuales es difícil no estar de acuerdo. Las herramientas que tenemos para el manejo de versiones dan pena. Hacer un producto de software ya es suficientemente complejo como para tener que perder tiempo con la realización de merges de diferentes ramas de codigos que por algun motivo tuvimos que separar.
Al menos consuela un poco, que los que desarrollan aplicaciones de clase mundial y que tienen mas recursos que nosotros para el manejo de sus proyectos, tienen mas o menos los mismos problemas que tenemos aqui en el sur.

En la comunidad GeneXus, no hay mucho ambiente con este tema (control de versiones, desarrollos paralelos, branch y merge, etc), y aunque han aparecido varias herramientas en los ultimos años, aun no hay una masa critica como para que tengamos herramientas que faciliten realmente el desarrollo. Esperemos que esto cambie en los proximos años. La Rocha y GXExtensions nos abren una puerta enorme para el manejo de este tipo de cosas.

Martin Fowler, decia que nadie puede desarrollar aplicaciones profesionales, sin un control de versiones.

El video...

Comentarios

  1. Acabo de terminar de ver el video y más alla de tu comentario de que la forma de expresarse de Linus podría mejorar, no deja de ser cierto que casi siempre tiene razón.

    El control de versiones de código de genexus es pésimo, no solo dificulta la utilización de herramientas externas por el hecho de no utilizar archivos concretos para cosas concretas (o por lo menos no estan documentados), sino que el único producto controlable que produce (las exportaciones) tienen datos que cambian aleatoriamente de una versión a otra, me refiero a la fecha de modificación de cada objeto, y propiedades de uso interno como el números de identificación, etc.

    Todo esto complica bastante el manejo de versiones, ni hablar de braches y merges.

    Trabajo en una empresa donde somos 2 o 3 desarrollando sobre una kb, pero en mi opinión esta limitación de la herramienta hace directamente imposible trabajar seriamente en un proyecto con más de 4 o 5 personas, al menos no durmiendo tranquilo.

    Para dar un ejemplo puntual, la solución que encontré para la empresa donde trabajo es dividir el proyecto en carpetas, exportar cada carpeta por separado, y controlar esas exportaciones en una herramienta externa, como no se pueden hacer merge, estamos obligados a "bloquear" cada módulo mientras alguien hace un cambio, por otro lado, tenemos dos branches del producto, una estable y una de desarrollo, nuevamente, como hacer merge es imposible, las correcciones por errores deben ser realizadas dos veces, si leyeron bien, dos veces, una vez en la rama estable, y otra en la de desarrollo, con lo cual la sola idea de crear otra rama para alguna funcionalidad experimental es una locura.

    Saludos. Lucas.

    ResponderBorrar
  2. Lucas:
    Todos hemos pasado por la frustración de tratar de manejar versiones con GeneXus.

    Lo que planteas con las limitaciones del distribute, es cierto. Seria bueno tener un distribute "puro" del objeto, de forma de facilitar dicho control. Por ejemplo seria bueno lograr que al distribuir un objeto, no se distribuyan los objetos asociados, como ser themes, atributos, tablas, etc y como dices tu, fechas y horas de distribucion, etc. El formato de los xpz fue siempre algo manejado en forma medio "sui generis" por Artech, y esto dificulta mucho la creacion de herramientas para este manejo. En algunos ciclos anteriores de betatesting solicite esto mismo (un distribute minimalista digamos) y no tuvo el eco suficiente. Tuvimos que hacer algo que tome el xml y le saque lo que no corresponde al objeto.

    Como digo en el post, en la Comunidad GeneXus aun no hay "masa critica", lo cual es una pena. Artech escucha bastante a lo que pedimos, pero si lo pedimos muy poco, no van a implementarlo.

    Con la version Rocha, la cosa ya mejoro mucho. Ademas ahora podriamos hacer herramientas que se instalen en GeneXus, para realizar estos controles.

    En cuanto a Linus, lo que dice, casi siempre tiene razon, por eso lo escucho con atención. Lo que no me gusta, es COMO lo dice.

    ResponderBorrar
  3. Me olvide de decir que hay herramientas para el manejo de versiones con GeneXus.

    http://gxtend.accendo-it.com/website/html/
    http://www.intergsoft.com/

    Nosotros en concepto, tenemos una KBManager.

    Debe haber varias mas que no conozco..

    ResponderBorrar
  4. No niego la calidad de esas herramientas, pero el solo hecho de que existan, ya marca un problema en la implementación de genexus, o a caso alguien conoce algun sistema de gestión de versiones que sirva solamente para un lenguaje?

    Saludos. Lucas.

    ResponderBorrar
  5. Si, tenés razon.

    Seria bueno poder integrarse con alguna herramienta open source existente, pero tambien es cierto que muchas herramientas del mercado estan enfocadas al archivo y file system, que no se adaptan a la realidad de Genexus, que maneja el conocimiento a otro nivel.

    Creo que por estas caracteristicas propias de GeneXus, el manejo de versiones deberia integrarse mucho a la herramienta.

    ResponderBorrar
  6. En mi empresa usamos control de version para todo... Pero Genexus es un dolor de cabeza.

    Si Genexus tubiera un "fuente" para sus objetos en lugar de guardarlo en un solo gran XML y si pudieramos controlar la herramienta desde la linea de comando tocariamos el cielo.

    Como podemos hacercar estas ideas al equipo de Genexus?

    ResponderBorrar
  7. Alejandro:
    Lo que decis es verdad. Genexus no es basado en archivos, por lo que cualquier solucion de control de versiones que se base en archivos, no sirve para usar con Genexus.

    En algun momento hice una pequeña herramienta (KBCVSP - Control de Versiones sin Pretensiones) que hace un xml para cada objeto y lo guarda en el FileSystem. Tambien se podia interfasear (que palabra!!) con Subversion, a traves de linea de comando, para lograr controlar los cambios de version. De cualquier forma creo que es algo en lo cual hay que trabajar bastante pues lo que hoy tenemos dificulta la creacion de aplicaciones empresariales.

    ResponderBorrar
  8. Estimados Amigos: Las empresas con mayor cantidad de desarrolladores GeneXus utilizan nuestro SVT para el Control de Versiones. Estamos en 9 países y más de 25 instalaciones donde todo el desarrollo GX se hace en un entorno seguro y controlado. A la fecha, administramos más de 5 millones de líneas de código GX...y con la trazabilidad completa de TODO el desarrollo. Con gusto les puedo enviar más información. Saludos
    neyb@intergsoft.com

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.