tortoise tag que informatica from create branches svn merge branch

svn - tag - tortoise merge



Subversion: ¿cómo encontrar todas las revisiones que no están fusionadas con trunk? (11)

Debido a la falta de una bala de plata, la forma disciplinada es mantener una nota de lo que se ha fusionado y de dónde.

Las fuentes de ramificación para el ciclo de lanzamiento son uno de los escenarios comunes de administración de fuentes. Fusionarse lo antes posible es una buena práctica. Por lo tanto, tenemos un factor humano: la rama está cerrada, pero alguien olvidó fusionar algo con el tronco.

P: ¿Existe una forma de "hacer un clic" para obtener todos los números de revisión que no se combinaron de la rama X al tronco?

(Nota: No necesito estos números de revisión para encontrar qué fusionar, los necesito para crear una validación automática, que le recuerde a las personas que deben asegurarse de que no se olviden de fusionar algo en el enlace. La fusión en sí misma no es un problema).

Parece que el comando svn mergeinfo no puede ayudar aquí. Pasar las ramas y las raíces del tronco fallará si la fusión se realizó no en el nivel raíz (y es un escenario común).

Guiones, herramientas, cualquier clase de ganchos svn como solución son bienvenidos.

PD

La última versión de SVN. No es necesario discutir cuán común o bueno es este escenario;)


Estoy disfrutando de tu hilo después de 3 años de haber sido creado. Y creo que todavía no hay solución para su tarea en la forma en que lo pones :)

Lo que encontré en la $ svn help merge es el consejo de no hacer fusiones de subárbol:

Si desea fusionar solo un subárbol, entonces la ruta del subárbol debe incluirse en SOURCE y TARGET_WCPATH; esto es desaconsejado , para evitar el subárbol mergeinfo

Así que supongo que la solución es romper su "escenario común" de hacer combinaciones de subárboles.

Sería obligatorio establecer algún control para la operación de fusión, ya que de lo contrario, cualquiera que tenga acceso de Lectura a una rama y acceso de Escritura a otra puede hacer la fusión de primero a segundo. Entonces, la pregunta real es cómo controlar las combinaciones de subárboles)


He escrito Java Web Application utilizando Wicket y SVNKit para encontrar revisiones no fusionadas entre sucursales, puede personalizarse para hacer lo que quiera ... link

o


Lo siento, no tengo mi servidor SVN en casa para probar esto ahora, pero podría el comando:

svn log --verbose

Que podrías analizar? No estoy seguro de la salida después de volver a fusionar con main, pero es posible que pueda analizar (utilizando un script, que no tengo porque yo soy el único que usa mi servidor SVN) el registro y leer todo los archivos que se han registrado, y luego buscar una palabra clave que indique que el archivo se ha fusionado con main?

Trataré de verlo alguna vez esta noche cuando llegue a casa si tengo algo de tiempo.


Me doy cuenta de que su caso probablemente sea demasiado tarde para esto, pero lo que hago para este tipo de cosas es establecer una convención para las confusiones de fusión, para que sean identificables más adelante. Por ejemplo, "Fusionar [1234]: ... (registro de confirmación completo de 1234) ...". Entonces puedo analizarlo fuera de svn log con un script más tarde.

Para asegurarse de que todo su equipo lo haga, convierta la convención de fusión en un script y póngalo en su proyecto. (por ejemplo, ./scripts/merge 1234). La gente en general incluso apreciará esto, doblemente si el script hace que las fusiones sean más fáciles de lo que haría el comando svn en bruto al hacer cosas como descifrar el URL de origen automáticamente

Buena suerte.


No me preocuparía por los números de cambio específicos que deben fusionarse, sino que simplemente mire las diferencias:

Primero, actualice la rama lateral con el tronco (o vea qué se fusionaría):

cd branch-dir svn merge --reintegrate http://svnrepo/path-to-trunk . svn ci -m''making this branch current'' cd ../trunk-dir svn merge --dry-run http://svnrepo/path-to-trunk http://svnrepo/path-to-branch . svn ci -m''merging in all unmerged changes from <branch>''

Recuerde, los comandos de combinación de svn se parecen a los comandos de svn diff: usted crea un parche / parche y lo aplica a una ubicación en particular. Ese comando de fusión anterior simplemente dice "tomar todas las diferencias entre el tronco y la rama y aplicarlas a una copia de trabajo del tronco". De modo que podría fácilmente cambiar ese segundo comando de fusión en un diff para su notificación por correo.

No olvide verificar los diffs antes de comprometerse en cada caso, para asegurarse de que no haya sucedido nada malo. Es posible que también deba resolver algunos conflictos.


Por esa razón, CVS creó una etiqueta para marcar una raíz de la rama :) Para SVN que debería verse así:

+ trunk / project1 + tags / project1-b1-root + branches / project1-b1

Notas:

  1. Tag project1-b1-root y branch project1-b1 se crean al mismo tiempo desde trunk.
  2. Nadie debe comprometerse con project1-b1-root (puede restringir esta operación para etiquetas / ruta).
  3. Cuando todos afirman que ha puesto todo en el tronco, se hace una diferencia entre project1-b1-root y project1-b1 y se intenta aplicarlo al tronco: los cambios, que ya se aplicaron, se omitirán en silencio, para el descansar verá la diferencia o colisiones.

Puedes hacer esto súper fácilmente si estás usando una versión relativamente nueva de Subversion (1.5 o superior, creo) con el mergeinfo .

svn mergeinfo --show-revs eligible svn://repo/branches/your-branch-name svn://repo/trunk

Esto le mostrará todas las revisiones que son elegibles para ser fusionadas al tronco desde la rama "your-branch-name".

Fuente: http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.mergeinfo.html


Respuesta corta: no lo creo

Larga respuesta: terminé escribiendo un script de Python para responder a esta pregunta. Siempre que los desarrolladores combinen un conjunto de cambios, se les exige que pongan "rXXX fusionado" en el mensaje de registro. (Esto desde antes de svn: existía mergeinfo) El script analiza todas las ramas svn activas + troncales y escanea de forma recursiva todos los enlaces "combinados", dando como resultado una lista por desarrollador de cambios que no se han fusionado.

[actualización] La respuesta de @tmont es mejor ahora que todos tienen una versión svn que admite svn mergeinfo --show-revs eligible y svn merge --record-only para aquellos momentos en los que solo desea grabar la corrección lógica.


Según la respuesta above , desde la sucursal que desea verificar para revisiones no fusionadas

svn merge --dry-run http://svnrepo/path-to-merge-source . / | grep Merging / | sed ''s/--- Merging//'' / | sed ''s/into.*//'' / | sort -u / | sed ''s/ through r/:/'' / | sed -e :a -e N -e ''s//n//'' -e ta / | sed ''s/ r/ -r/g'' / | sed ''s|^|svn log http://svnrepo/path-to-merge-source |''


Will svn merge --dry-run dará los detalles que necesita?