2010-01-14 19 views
11

Tengo un problema que me está causando mucha pena en Subverion. Estoy trabajando en una rama que se supone que debe permanecer activa hasta que mi conjunto de características se complete el desarrollo antes de volver a integrarlo. Lamentablemente, el negocio ha considerado que algo que he completado es "de misión crítica" y quieren que saquemos esa funcionalidad de la rama y la introduzcamos en el maletero para que QA pueda recogerla.SVN - Administrar una fusión parcial de una revisión

El problema que tengo es que desarrollé la funcionalidad en un directorio separado que creé mientras trabajaba en algo completamente diferente. Entonces, para fusionar el código restante que requiere mi funcionalidad, primero necesito obtener la creación del directorio que hice anteriormente.

Estas son las revisiones que tengo que dar un tirón:

Rev 20
  Un ./project_foo
  Un ./project_foo/not_required_file.txt

Rev 24
  Un ./ project_foo/required_file.txt

Así que para obtener esto en el maletero tuve que hacer lo siguiente:

svn merge -R20: 21 -> esto me pone el directorio, así como el not_required_file.txt
svn revert project_foo/not_required_file.txt -> deshacerse del archivo no quiero
svn merge -r24 : 25 -> esto me da el archivo que necesito

Lo que funcionó y consiguió las cosas en el maletero que yo quería PERO cuando estaba completo dev y corrí svn merge --reintegrate, yo (obviamente) no conseguí el not_required_file.txt de la Revisión 20 y, por lo tanto, se encontró con conflictos de árbol (a partir de los cambios posteriores que realicé más adelante).

Así que estoy buscando orientación sobre qué hacer en estas situaciones.

  • ¿Hay alguna forma de fusionar solo los cambios específicos que deseo de una revisión específica?
  • ¿Hay alguna forma de aprovechar los cambios que omití deliberadamente cuando reintegro toda la sucursal?
  • ¿Pude crear la estructura de directorios que necesito en la línea externa y luego fusionar solo los cambios de archivos?
  • ¿Puedo crear otra rama, mover los cambios necesarios por allí, reintegrar esa rama y luego tirar del tronco a mi rama original?

Gracias.

Respuesta

-1

Buena pregunta. :-)

Parece que sus ramas están un poco desordenadas. Tienes buenas ideas para resolverlo. ¿Si funciona? Pruébelo, a veces nunca se sabe.

Creo que no necesita fusionar rev. 21 antes de 24 en tu ejemplo. El directorio que falta se creará, de todos modos.

Si no puede ayudarse con la bifurcación/fusión, intente mover los archivos manualmente (Tortoise lo ayuda con esto).

En general, evite combinar parcialmente las revisiones. Comprometerse más a menudo para que pueda hacer la recolección de cereza de una manera más limpia.

3

¿Hay una manera de combinar en solo los cambios específicos que quiero de una revisión específica ?

Si no desea una revisión completa, copiaría lo que desea de forma manual creando un archivo de parche y aplicándolo a la otra rama. De esta forma, en lugar de que subversion saltee esa revisión más tarde (cuando reinserta la rama), intenta fusionarla y usted solo trata con un conflicto ordinario en lo que ha copiado manualmente, pero también se funde con la parte que originalmente quería omitir.

En el caso de un archivo crear/eliminar/agregar, lo crearía en el momento de la reintegración y evitaría su conflicto de árbol, ya que esa 'revisión parcial' que desea no se fusionó oficialmente.

En el caso en que no se haya creado/eliminado/movido ningún archivo, se evita el potencial de olvidar que usted excluyó parte de su revisión cuando la fusionó previamente.

Después de lo anterior impide el siguiente:

¿Hay alguna forma de agarrar las cambios que echaba de menos cuando deliberadamente reintegrar a toda la rama?

Si no fusiona una revisión parcial, no habrá nada excluido deliberadamente registrado por subversión y debería tener un conflicto ordinario para tratar en la parte ya copiada.

En su caso, puede decirle a subversión que vuelva a fusionar esa revisión individual, haciendo lo contrario de lo que hacía anteriormente (resolviendo conflictos o invirtiendo la parte que deseaba originalmente, manteniendo la parte que originalmente había omitido) , pero no estoy seguro de cómo funciona esto una vez que la fusión ya ha sido registrada.

Alternativamente, si usa TortoiseSVN, debe poder seleccionar la revisión en el registro (en su rama de características), haga clic con el botón derecho sobre los archivos que le interesan que fueron modificados como parte de esa revisión, y "show cambia como diff ", guárdelo y vuelva a aplicarlo manualmente al tronco (o a cualquier rama que sea el objetivo de nuestra rama de reintegración).

¿Podría crear la estructura de directorios que necesito en el tronco y luego fusionar únicamente sobre los cambios en los archivos?

Pruébelo y vea. En el peor, usted la comprobación otro espacio de trabajo o manualmente fijar los contenidos del archivo (en el caso de que se salta)

¿Puedo crear otra rama, mueve los cambios requeridos por allá, reintegrar esa rama y luego tire del tronco a mi rama original?

Ahora me estás haciendo doler la cabeza :) Arreglarlo manualmente me parece menos trabajo.Arreglaré la parte que excluiste en el maletero y luego volveré a intentar reintegrar la rama.

Esperemos que parte de esto sea útil.

1

simplemente "svn copy" faltan las carpetas de la rama al tronco recursivamente.

-1

Por sus problemas actuales, se puede intentar SVK, que tiene un mejor soporte fusión de SVN (o lo hizo la última vez que estaba usando SVN en gran medida suficiente como para tener que hacer fusiones): http://svk.bestpractical.com/view/HomePage

Me he dado cuenta de que usted Mencionó el problema de varios equipos con distintos niveles de habilidad técnica, por lo que SVK no es realmente la mejor solución. En realidad, prefiero git-svn a SVK, ya que proporciona beneficios similares (incluso mejor fusión que SVN o SVK).

Dependiendo del nivel bajo de su rango de niveles de habilidad, SVK podría estar lo suficientemente cerca de SVN como para hacer el truco, pero agrega algunos pasos adicionales para expulsar los cambios, y no sé qué tan bien es compatible con Windows (o si es compatible con Windows), o si eso es un problema en su entorno.

+0

Apreciar la respuesta, pero básicamente se ha eliminado un cambio de herramienta (solo recientemente fue el cambio a SVN creado - VSS utilizado anteriormente y, desafortunadamente, la tienda solo es Windows - para todo. – oldNoakes

Cuestiones relacionadas