Android Studio: no se puede fusionar desde la rama SVN
android-studio intellij-idea (2)
No soy un experto en SVN, pero creo que necesitarás cambiar la estructura de tu directorio. Creo que aunque es solo una convención, svn usa la estructura de directorios para fusionar ramas. Entonces su estructura de directorios debería ser:
SVN
/Android
/branches
/production
/featureA2
/featureA3
/tags
/trunk
/IOS
/branches
/production
/featureA2
/featureA3
/tags
/trunk
A pesar de que el navegador TortoiseSVN Repo le permitirá mover sus directorios, se almacenan muchos metadatos en cada directorio y se utilizan para manejar el proceso de fusión, por lo que es posible que deba comenzar su repositorio nuevamente. Consulte la guía de mejores prácticas de subversión y las categorías para el diseño del repositorio para obtener más detalles sobre cómo configurar sus repositorios . Dicho todo esto, dudaría en confiar en la integración svn de Android Studio para hacer trabajo pesado como la fusión de ramas ya que (aunque la mayoría de las cosas en las herramientas de JetBrains son fantásticas) su manejo de SVN deja mucho que desear.
Hemos decidido seguir el proceso de creación de una nueva sucursal SVN para cada nueva característica que agreguemos a nuestra aplicación móvil. El objetivo final detrás de esto es preservar el historial de cada cambio de código (esto no sucede cuando copiamos manualmente las carpetas de proyectos en SVN en lugar de crear y fusionar ramas).
Mi problema es que hasta ahora no puedo fusionar los cambios de una rama a otra.
Ya he referido las siguientes publicaciones sin éxito:
-
Cómo fusionar sucursal con troncal usando SVN en Android Studio .
-
Proyecto de actualización de Android Studio: Combinar vs Rebase vs Branch Default .
-
Cómo fusionar rama a SVN con Android Studio .
-
Cómo combinar revisiones específicas de svn de rama a troncal en Android Studio 2.0 .
Esto es lo que he intentado hasta ahora:
Tengo dos ramas de características como se puede ver a continuación en Tortoise SVN :
Quiero fusionar los cambios en la rama
Feature_A3
en la rama
Feature_A2
.
Para hacer esto, estoy usando la opción
Merge from
en VCS de Android Studio de la copia de trabajo A2:
Luego me pide que seleccione la rama desde la que fusionar (A3) o que configure otras ramas:
Hago clic en Configurar sucursales , solo para mostrarle la configuración de sucursal existente:
Como puede ver, A2 es el tronco y A3 es la rama . ¿Es esto correcto?
Luego me pregunta qué parte de A3 quiero fusionar con A2.
Selecciono el directorio
/src
(donde están presentes los cambios relevantes):
Luego, generosamente, me da tres formas diferentes de realizar la operación de fusión:
Selecciono la tercera opción, ya que me da directamente los cambios que necesito fusionar:
Hago clic en Combinar seleccionados y BAM !!! Me sale este error cada vez:
No hay ni idea de cuáles son los "conflictos no resueltos" o los "elementos omitidos". ¿Por qué recibo este error y qué debo hacer para fusionar los cambios en A3 en A2? Puede ayudarme alguien, por favor ? Todas las respuestas serán apreciadas. Gracias ...
He estado siguiendo la documentación oficial de Intellij IDEA a continuación:
Tenga en cuenta que:
-
Actualmente estoy usando Subversion, no Git.
-
La estructura de directorios de mis copias de trabajo locales no es exactamente idéntica a la de los repositorios SVN. ¿Podría ser esta la causa del error?
LA RESPUESTA ...
Gracias a Peter Parker y especialmente a Yoav Aharoni por sus valiosos comentarios. Como Yoav señaló correctamente, fue de hecho la forma en que se especificó la carpeta de ubicaciones de sucursales. Debe ser la carpeta que contiene las ramas, no las carpetas de las ramas en sí: y como Peter dijo correctamente, al marcar "Incluir revisiones fusionadas" se muestra el historial combinado. Ahora puedo fusionarme desde el propio IDE y ver el historial combinado en TortoiseSVN. NO línea de comando! ¡¡¡HURRA!!!
Sin embargo, un último problema es que no puedo ver el historial combinado en Android Studio (Intellij IDEA) como se describe en Visualización de fuentes de combinación . ¿Alguien sabe cómo lograr esto en Android Studio?
Uf, no he usado SVN en mucho tiempo ... :)
Pero por lo que puedo recordar
Branch locations
deberían ser la carpeta que
contiene
las carpetas de sus sucursales (y no cada carpeta de sucursal individual).
Verá, normalmente un repositorio SVN sigue una convención de nomenclatura estándar y una estructura de carpetas:
trunk/
branches/
Feature_A2/
Feature_A3/
tags/
v1.01/
v1.02/
and so on...
trunk
es donde se lleva a cabo el desarrollo principal, y las
branches
son para características, proyectos a largo plazo o riesgosos, o para diferentes etapas (como QA y pre-prod).
Entonces, hasta donde recuerdo, Android Studio espera que establezcas
Branch locations
de
branches
carpeta de
branches
.
En su caso, creo que debería ser
http://192.168.0.64/svn/.../Android/Feature
.
Además, su
trunk
no es
Feature_A2
- Feature_A2 es solo otra rama.
Aunque no puedo ver el contenido, creo que
http://192.168.0.64/svn/.../Android/Development
podría ser su tronco.
Lo que no debería molestarle mucho, ya que no tiene que fusionarse con su tronco, también puede fusionarse entre ramas (por ejemplo, fusionar Feature_A3 en Feature_A2).
Entonces, para recapitular:
- Aunque no es obligatorio, recomiendo cambiar el nombre de sus carpetas para que coincidan con las convenciones (puede hacerlo fácilmente haciendo clic derecho en Tortoise SVN, pero solo DESPUÉS de que todos los compañeros de equipo se comprometan, de lo contrario, la fusión será un INFIERNO para ellos).
-
Intente establecer
Branch locations
enhttp://192.168.0.64/svn/.../Android/Feature
-
Y
Trunk
ahttp://192.168.0.64/svn/.../Android/Development
(solo si de hecho contiene fuentes, similares a Feature_A2 / 3) -
Considere "etiquetar" sus lanzamientos en una carpeta de
tags
(se trata básicamente de copiar la carpeta troncal / rama a las etiquetas, pero tiene un comando para eso).Si lo hace, también puede agregar la carpeta de
tags
a lasBranch locations
, de esa manera podrá comparar su fuente actual con cualquier versión anterior (que es útil).
PD: el
"unresolved conflicts" error
también puede significar que tiene conflictos no resueltos (duh :)).
Los conflictos generalmente se crean cuando tanto usted como un compañero de equipo cambian las mismas líneas en el archivo (o si él elimina un archivo que usted cambió) y usted actualiza para obtener sus cambios.
SVN no le permitirá fusionarse hasta que resuelva manualmente estos conflictos / cambios.
Puede encontrar conflictos en la pestaña
Version Control
en la parte inferior, se marcarán en rojo.
(Pero no creo que ese sea el problema en su caso)
¡Avísame si eso te funciona!