Mostrando las entradas con la etiqueta svn. Mostrar todas las entradas
Mostrando las entradas con la etiqueta svn. Mostrar todas las entradas

[SVN] Resolución de conflictos usando un IDE (Netbeans)

Dicen que una imagen vale más que mil palabras, así que me pareció bueno mostrarles algo que es relativamente "común" que suceda en un proyecto, y es, que existan conflictos entre las modificaciones de uno o más desarrolladores, muchas veces por modificar las mismas líneas de código en el mismo lapso de tiempo.

Los sistemas de versionado, si bien se encargan de mantener sincronizado un proyecto donde pueden trabajar muchas personas, en determinados casos no puede hacer "magia" y cuando se dan los conflictos (porque no sabe qué líneas deben quedar como definitivas) nos deja a nosotros la responsabilidad de decidir qué hacer.

En este caso veremos cómo luego de trabajar sobre un fuente, al intentar hacer un commit el IDE (en este caso Netbeans for PHP) me avisa que ya existieron cambios en el repositorio SVN, y que luego de hacer mi actualización local (update) me reporta que hay "conflictos" con los cambios.


Por lo general, usemos o no un IDE, ocurrirá lo siguiente:
  • nuestro fuente quedará marcado en las líneas que ocurrieron el conflicto (por lo tanto si estamos ejecutando este fuente, ahora dejará de funcionar y dará error de sintaxis)
  • y 3 archivos más, con la información de las líneas del problema (.mine, .r198 y .r241, estos últimos hacen referencia a las líneas del conflicto).

     En el caso de Netbeans (aunque en Eclipse es muy similar), nos posicionamos sobre el fuente en cuestión, botón derecho, Subversion > Resolve Conflicts... y nos desplegará la siguiente interfaz


    Mostrando en la parte superior ambos archivos, la versión local (izq) y la versión remota (der), y sobre cada una de ellas hay un botón de "Aceptar" para que nosotros decidamos cual de las dos se queda (descartando la opuesta) y podremos ver cómo va quedando la versión final en la parte inferior central.


    Aquí podemos visualizar cómo se vería si aceptáramos la versión del lado derecho (versión remota)



    Al finalizar de responder cual versión del conflicto queremos dejar nos preguntará si queremos finalmente salvar todos los cambios y marcar el archivo como "resuelto".



    Y conflicto solucionado, ahora podemos seguir adelante, no sin antes volver a charlar con el equipo de desarrollo para tratar de evitar estos problemas a futuro.

    Saludos! ;-)

    [SVN] Agregar notificación por email en caso de cambios en el repositorio

    Esto es muy productivo en cualquier equipo de trabajo, recibir notificación por email de cada vez que ocurre un cambio en un repositorio de un proyecto donde estés trabajando, esto permite tener a todo el equipo notificado y coordinado con los cambios, y en caso de problemas poder detectarlo rápidamente (se tocó un archivo que no correspondía, un error, cambio no planeado, etc). También permite aumentar el contro de calidad si esto es revisado por el teamleader (o un responsable de QA) que revise si se cumplen los criterios de calidad prefijados.

    Les dejo la configuración que hay que hacer en el hosting dreamhost.com, pero que también pueden aplicar en vuestros servidores:

    En el directorio del proyecto SVN tienen que buscar el subdirectorio hooks, y copiar el archivo de ejemplo post-commit.tmpl como post-commit (donde agregaremos todas las acciones que queremos que ocurran una vez que existan un commit):

    #!/bin/sh

    REPOS="$1"
    REV="$2"

    /usr/share/subversion/hook-scripts/commit-email.pl --from info@surforce.com "$REPOS" "$REV" desa1@gmail.com desa2@gmail.com desa3@gmail.com


    Y listo, ahora luego de que cualquier desarrollador haga un commit, nos llegará a todos un email con un diff con los cambios realizados, por ejemplo:

    Author: alejandro145
    Date: 2009-12-04 14:49:01 -0800 (Fri, 04 Dec 2009)
    New Revision: 16

    Modified:
    public/js/jquery/ui/themes/ui-
    lightness/ui.datepicker.css
    Log:
    Cambia el tamaño del widget para elegir fechas

    Modified: public/js/jquery/ui/themes/ui-lightness/ui.datepicker.css
    ===================================================================
    --- public/js/jquery/ui/themes/ui-lightness/ui.datepicker.css 2009-12-04 21:48:09 UTC (rev 15)
    +++ public/js/jquery/ui/themes/ui-lightness/ui.datepicker.css 2009-12-04 22:49:01 UTC (rev 16)
    @@ -1,5 +1,7 @@
    /* Datepicker
    ----------------------------------*/
    +.ui-widget.ui-datepicker { font-size:.8em }
    +
    .ui-datepicker { width: 17em; padding: .2em .2em 0; }

    Las líneas agregadas aparecen a la izquierda con un "+" o un "-" si estas son eliminadas.

    Que les sirva de referencia para su trabajo en equipo ;-)

    PD: por las dudas, ya que es un error que he cometido seguido, el scripts tiene que tener permisos de ejecución (confunde muchas veces que el ejemplo .tmpl no tenga permisos de ejecución, y uno viene y lo copia directamente y piensa que es solo cambiar el contenido), ya que es SVN lo tiene que ejecutar.

    Lo bueno de usar un IDE + SVN (captura)


    A veces entramos fácilmente en la discusión de si usar un IDE o un "Editor con Esteroides", o si usar o no un SCM, etc, bueno, aquí un ejemplo de lo que es retomar un proyecto que dejaste colgado y no te acuerdas qué fue lo último que modificaste localmente con respecto a lo último que tienes en tu servidor de producción.

    Usando Netbeans 6.7 RC2 + SVN, abro el fuente y le doy a la combinación "ALT + D" (lo configuré así para que me ejecute el comando diff de SVN), lo cual muestra gráficamente las diferencias entre ambas versiones.

    Lo que está a la izquierda es lo último versionado, lo que está a la derecha son los cambios locales que hice hace unos días (agregando un control para que antes de asignar verifique si están registradas las variables).

    Lo bueno es que si cometí errores, puedo presionar sobre las "x" rojas y eliminar las líneas locales diferentes que no quiero dejar (de todas formas puedo volver atrás cuando quiera y comparar las versiones que quiera, no importa cuales, y recuperar cualquier línea de código).

    Para quién aún no usa IDE's y versionado, no, no es lo mismo que un "Editor con Esteroides" (si no te muestra el contenido público de un objeto, yo no lo considero un IDE).

    Plugin: TortoiseSVN dentro de Eclipse

    A pesar que Eclipse soporta a través de módulos servicios como SVN, muchas veces usando subeclipse, este puede no funcionar correctamente (me pasa generalmente con el primer checkout) o vernos limitados en las funcionalidades que traen otras herramientas.


    Si estás en el ambiente Windows, uno de los clientes más completos es TortoiseSVN, que se integra al explorador y ofrece muchas opciones de consultas para revisar los cambios de los fuentes (como el famoso "blame" que permite saber exactamente qué línea tocó cada uno de los desarrolladores sobre un mismo fuente).


    Si estando dentro de Eclipse extrañas las funcionalidades de TortoiseSVN, puedes usar este plugin para tener todo integrado en la misma herramienta.

    PD: gracias Fabian Bueno por tu aporte ;-)

    Entradas populares