2009-02-21 10 views
6

Tengo un directorio bajo control de subversión. Creé una rama para probar fusionar cosas. Tomé un archivo, modifiqué la línea X en el tronco como "abc" y modifiqué la misma línea X como "def" en su rama.SVN fusionar pregunta

Entonces, desde el directorio de trabajo rama que hice:

svn merge branchURL trunkURL . 

Se actualizan el archivo con el contenido como "abc" en ese número de línea, es decir, que no me dio un conflicto en el mismo número de línea como svn update me habría dado si lo hubiera hecho en el mismo directorio de trabajo y alguien hubiera cometido la "def" en el repositorio.

¿El svn merge simplemente reemplaza el contenido durante la fusión y no trae ningún conflicto?

Y si es así, la misma razón de ramificar un directorio de proyecto fuera del tronco principal sería inútil cuando no se puede unir de manera que se mantengan ambos cambios en el tronco y la rama.

+0

Entonces 1) ramificó 2) modificó la línea X a "abc" en el tronco 3) cambió a la rama 4) modificó la línea X a "def" en la rama 5) se fusionó? ¿Cuál fue el contenido de la línea X antes de modificarlo a "abc"? –

+0

supongo que habría una diferencia de versión en mi oficina b/w mi cliente svn y el servidor svn, ya que recuerdo que recientemente actualicé mi versión de svn a 1.5 y eso no sucedió en el servidor donde existen las repos .. entonces el hecho de que no estaba recibiendo conflictos, puede ser el resultado de la versión diff. – ashishsony

Respuesta

6

Te das cuenta de lo que

svn merge branchUrl trunkUrl branchWorkingCopy 

hace realidad, sí?

Aquí es una traducción:

averiguar el conjunto de cambios necesarios para que el contenido de branchUrl idénticos a los de trunkUrl. Ahora realice esos cambios en el branchWorkingCopy.

No se generarán conflictos que se fusionen de esta manera. Sin embargo, cuando compruebe su branchWorkingCopy, habrá hecho que su bifurcación sea idéntica a su troncal, lo que seguramente no es lo que desea.

Si lo que desea es copiar los cambios seleccionados de tronco a la rama , se tendrá que indicar a Subversion el que los cambios que desea copiar y utilizar una forma diferente de un comando de fusionado:

svn merge -r100:103 trunkUrl branchWorkingCopy 

Lo que significa: Determine el conjunto de cambios necesarios para pasar de r100 a r103 en el maletero. Realice esos cambios en la copia de trabajo (de la rama). Tenga en cuenta que este "conjunto de cambios" no incluirá los cambios realizados por r100, ya que son capturados por el conjunto de cambios necesarios para obtener desde r99 hasta r100. Los rangos de revisión en Subversion son half open.

Además, considere leer el fine manual, si aún no lo ha hecho.

+0

Todavía puede obtener conflictos (lo hice), pero su respuesta es correcta. –

+0

Eso me sorprende, pero luego asumo que no hay cambios no confirmados en branchWorkingCopy. ¿Has visto conflictos incluso con un destino limpio? – bendin

+0

en realidad esta respuesta despejó todas mis dudas, ya que estaba usando el comando con el orden incorrecto de los argumentos ... – ashishsony

0

también lo hace el svn merge simplemente reemplaza el contenido, mientras que la fusión y no llevar cualquier conflicto?

Bueno, no. Realmente no puedo señalar lo que hizo mal, pero la combinación de indicadores tiene el mismo conflicto que la actualización.

0

Me puede estar perdiendo algo, pero cuando he usado svn merge, siempre he tenido que obtener los números de revisión correctos si quería que funcionaran correctamente.

lo tanto, si ramificada (o la última fusionada) en la revisión 100, el tronco se encuentra actualmente en 200, y desea fusionar los cambios de la tronco en ella, a continuación, en el directorio de trabajo rama que hace:

svn merge -r 100:200 trunkURL 

Entonces creo que verá un conflicto, que usted resolverá y controlará. Hace una cosa similar en el directorio de trabajo de la troncal para fusionar desde su rama de nuevo en la cajuela.

svn merge sin -r diffs las dos ubicaciones que especifica y aplica que difieren en el directorio de trabajo. Así que especulo que lo que sucedió es que no hay conflicto, porque tu directorio de trabajo coincide con el jefe de la sucursal. Por lo tanto, la diferencia entre el encabezado de la rama y el encabezado del troncal se puede aplicar a su directorio de trabajo sin ningún problema. Esto no es lo que quiere hacer: todo lo que hace es cambiar su directorio de trabajo para que coincida con el tronco. Intente hacer otro cambio en la rama, regístrese y repita el proceso. Si la combinación deshace ese cambio (porque no está en el enlace troncal), entonces estoy en lo cierto acerca de esta forma de combinación de svn, pero como digo, no la he usado.

[Editar: antes de la versión 1.5 SVN ...]

directorios de trabajo y las ramas no son la misma cosa en el SVN, y molesto, ya que es, usted tiene que dar cuenta de las diferencias. SVN necesita más información para hacer la fusión de sucursal que desea, que para hacer una actualización o un checkin, porque afaik no tiene en cuenta automáticamente dónde se produjo la bifurcación en la forma en que siempre representa el lugar donde se ha desprotegido un directorio de trabajo. Estoy seguro de que hay una razón para eso, simplemente no sé con certeza de qué se trata: posiblemente porque svn copy es para más cosas que solo ramas.

[Editar ... pero según el comentario de Joshua McKinnon a esta respuesta, a partir de 1.5 svn admite fusiones de ramas adecuadas, que hacen lo que quieras automáticamente.Especifique la URL desde la que se está fusionando y ejecute el comando en el directorio de trabajo de lo que sea que se esté fusionando. Así que en este caso, intente

svn merge trunkURL 

y debería ver el conflicto. Puede que tenga que volver el directorio de trabajo en primer lugar.]

+0

Hasta la subversión 1.5, creo que esto siempre fue necesario. Ahora, un'URL de combinación de svn directo 'de workspce destino combinará todas las revisiones que no se registran como fusionadas en metadatos de subversión. –

+0

Agradable, gracias. Ahora que lo mencionas, recuerdo haber escuchado que 1.5 había mejorado en este aspecto. Pero la compañía con la que estaba cuando salió 1.5 ya tenía un montón de secuencias de comandos para averiguar los números correctos de la versión, y no había cambiado las cosas cuando me fui. –

+0

Creo que tiene un punto válido acerca de por qué no tuve el conflicto .. pero tendré que volver a intentarlo el lunes antes de que pueda publicar mis observaciones .. gracias por responder. – ashishsony

Cuestiones relacionadas