Pregunta

Estamos considerando pasar de un estilo de check-out/edit/check-in del sistema de control de versiones a Subversion, y durante la evaluación descubrimos que cuando realizas una acción de Actualización en TortoiseSVN (¿y presumiblemente en cualquier cliente de Subversion?), Si los cambios en el repositorio que deben aplicarse a los archivos que ha estado editando no causan ningún conflicto, se fusionarán automática/silenciosamente.

Esto nos asusta un poco, ya que es posible que esta fusión, aunque no produzca ningún error de compilación, al menos pueda introducir algunos errores lógicos que no se puedan detectar fácilmente.

Ejemplo muy simple:Estoy trabajando dentro de un método de C# cambiando algo de lógica en la última parte del método, y alguien más cambia el valor al que se inicializa una variable al inicio del método.El cambio de la otra persona no está en las líneas de código en las que estoy trabajando para que no haya conflicto;pero es posible cambiar drásticamente el resultado del método.

Lo que esperábamos que fuera la situación es que si es necesario realizar una fusión, entonces se mostrarían los dos archivos y se presentaría al menos una opción simple de aceptar/rechazar el cambio, de modo que al menos seamos conscientes de que algo ha cambiado y se les da la opción de ver si afecta nuestro código.

¿Hay alguna manera de hacer esto con Subversion/TortoiseSVN?¿O estamos demasiado atrapados en nuestra forma de trabajar actual y deberíamos dejar que haga lo suyo...?

¿Fue útil?

Solución

La mejor forma de solucionar este problema es educar a los desarrolladores.Después de realizar una actualización en TortoiseSVN, le muestra una lista de archivos afectados.Simplemente haciendo doble clic en cada archivo obtendrá la diferencia entre ellos.Luego podrá ver qué cambió entre su versión y la última versión del repositorio.

Otros consejos

Está en las preguntas frecuentes:¿Cómo puedo evitar que Subversion realice fusiones automáticas?

  1. En TortoiseSVN->Configuración->General->Archivo de configuración de Subversion, haga clic en el botón editar.
  2. Cambiar el [helpers] sección agregando

      diff-cmd = "C:\\false.bat"
    

    (tenga en cuenta la doble barra invertida)

  3. Cree el archivo C:\false.bat que contiene dos líneas

      @type %9
      @exit 1
    

Aquí hay un truco para TortoiseSVN:

Cómo desactivar la “fusión automática” en Subversion

El truco para svn.exe es configurar la herramienta de diferenciación externa svn en un programa que fallará constantemente.

svn --diff-cmd=/bin/false

Si el programa de diferencias externo falla, svn concluye que el conflicto no se puede resolver y no lo fusionaría.

Le sugiero que aprenda a trabajar con el modelo natural de Subversion si es posible.En la práctica, encontramos que los conflictos son raros y el tipo de conflicto lógico del que usted habla es casi inexistente (no recuerdo un caso en los últimos 4 años en nuestro repositorio).

Los miembros del equipo deben registrar los cambios en la escala más pequeña posible (mientras mantienen la corrección) en lugar de agrupar un día entero de trabajo para registrarlo solo una vez.Esto reducirá la posibilidad de pisar el trabajo de otra persona.

Si le preocupa un cambio particular que está realizando, Subversion le proporciona una cierre mecanismo que le permitirá evitar otros cambios en el archivo.Ver el libro Rojo capítulos sobre cierre.

Es por eso que las pruebas (unitarias) automatizadas son una parte fundamental del desarrollo de software distribuido.En el ejemplo que proporciona, al menos una prueba unitaria debería fallar en la actualización de svn y alertarle del error.

Recuerda qué es Subversion:un sistema de control de versiones, no una herramienta de fusión de código que funcione perfectamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top