subir - ¿Cómo ''arreglar'' un conflicto de rama/árbol SVN?
svn merge branch to trunk (3)
Me hice cargo de un proyecto de software y decidí poner todo bajo SVN (en Assembla ) usando Tortoise SVN. El tronco está bajo ROOT. Entonces, el tronco contenía toda la aplicación (que etiqueté con 1.0). Para mi primera gran función, creé una rama de características llamada "dev".
Podría fusionar los cambios en la rama de troncales en la rama de desarrollo sin problemas (ya que estaba haciendo pequeñas correcciones de errores). Una vez que mi función estuvo completa, me fusioné nuevamente en la rama del tronco. Todo estaba funcionando hasta este punto. El nuevo código en ROOT mostró la nueva característica correctamente. Pero luego hice un commit (del resultado de la fusión) y ahora cada vez que trato de hacer una fusión desde la raíz o desde la rama dev, SVN se queja de "conflicto de árbol" en muchos archivos. Incluso archivos que no toqué desde la fusión. Traté de resolver los conflictos, sin éxito.
Soy el único desarrollador, así que realmente no me importan los cambios importantes en el repositorio. Pero aún quiero mantener el historial de todos los archivos si es posible.
¿Cuál sería la mejor manera de solucionar este problema? ¿Hay alguna manera de etiquetar todos los últimos archivos en el tronco ROOT como la versión "definitiva" del archivo?
[EDITAR] Más información
- Sí, ''main'' y ''trunk'' es lo mismo. He aclarado mi pregunta
- Cuando se fusionó de la rama de características, ¿primero realizó otra fusión del tronco para eliminar los últimos cambios en el tronco? "Sí. El tronco estaba actualizado. Y la rama de desarrollo tenía todos los cambios del tronco.
- "todo se estropeó al comprometerse": lo que quise decir es que el compromiso estaba bien, pero luego, tan pronto como comencé a hacer la fusión desde el tronco / al tronco, SVN se queja de ''conflictos de árbol''.
- Tengo más de 200 conflictos de árbol. Entonces, lo que estoy buscando es un comando "aceptar todo"
[EDITAR] la solución de elhoim no solucionó mi problema. Sin embargo, tenía razón con los problemas de versión de SVN. Actualmente (2009-10-28), Assembla está usando SVN v1.5.1 y mi tortoiseSVN era v1.6. Así que esa era la razón por la que estaba teniendo tanto conflicto de árbol. Traté de usar la solución proporcionada por el enlace de elhoim y no funcionó (intenté fusionar varias veces antes de probar la fusión de HEAD-to-HEAD. Algunos archivos no se transfirieron a la rama raíz debido a eso).
Al ver que una fusión HEAD-to-HEAD aún no funcionaba, decidí simplemente eliminar todos los archivos ".svn" en mi carpeta de sucursales, copiar los archivos en la carpeta ROOT y realizar una confirmación.
Parece que algunos cambios realizados en el nivel de la estructura de directorios en el tronco no fueron absorbidos en la rama de desarrollo antes de intentar la fusión de nuevo en el tronco. Esto puede haber causado el conflicto del árbol en su caso.
Encontré esta sección del libro de SVN muy útil y contiene métodos para resolver una situación como la tuya. Espero que esto ayude. http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html
[EDITAR] INFORMACIÓN ADICIONAL:
¿Ya ha ejecutado svn resolved en el espacio de trabajo donde realmente sobrescribió / resolvió las versiones en conflicto? Es posible que haya archivos / carpetas marcados como "conflictivos" en su área de trabajo problemática (aquella en la que realmente realizó la fusión). Una vez que los haya revisado y resuelto los conflictos manualmente, puede ejecutar svn "resolved". Utilizo el cliente de línea de comando de subversión para mis fusiones, pero he verificado y esta opción también está disponible en tortuga. Esto debería eliminar el estado del conflicto y permitirle continuar. buena suerte.
Esta respuesta debería ayudar.
De lo contrario, ¿usa un cliente SVN tortuga 1.6.x? Parece que tiene problemas si el servidor SVN es inferior a 1.5.6 ...
En general, el soporte de fusión de SVN solo puede manejar el uso de una rama de características una vez . Es decir, trabajas en él y fusionas los cambios del tronco en él, y luego utilizas svn merge --reintegrate
para svn merge --reintegrate
de nuevo al tronco cuando hayas terminado.
Después de eso, si desea seguir trabajando, debe crear una nueva rama para trabajar. Creo que puedes eliminar el anterior y crear uno nuevo en su lugar sin perder datos si deseas mantener la misma ruta de repositorio, pero es posible que quieras probar primero con un repositorio de prueba en caso de que se obtenga la información de svn:merge
absurdo.
Esto no es perfecto Consulte esta publicación desde cuándo se introdujo la semántica de combinación actual para obtener información más detallada.
Además, ten cuidado con el uso de svn cp
o svn mv
para fines distintos de la bifurcación y fusión: si haces esto, necesitarás eliminar las propiedades de svn:merge
que crean (tanto en la rama como en el tronco si es necesario) antes de ejecutar la reintegración o fallará, los mensajes de conflicto de árbol.
En general, la rama y combinación de svn todavía es bastante débil en comparación con la familia VCS distribuida (git, hg, bzr, darcs, etc.), pero si sigues estas pautas, hace el trabajo.