2012-08-01 9 views
6

He ramificado mi troncal (en una revisión anterior) e implementado/comprometido una nueva característica e implementado parte de otra característica localmente en la rama. Ahora necesito reintegrar la función terminada al maletero.Las palabras clave de revisión PREV, BASE o COMMITTED no son válidas para URL al reinsertar una rama

I svn cp branches/completedfeature branches/uncompletedfeature para obtener la función parcialmente completa en su propia rama. Luego, svn revert -R . todo en la primera rama, de modo que esté actualizado.

Ahora, cuando svn merge --reintegrate ../../branches/completedfeature del tronco, me sale esto (para mí) de error críptico:

PREV, BASE, or COMMITTED revision keywords are invalid for URL while reintegrating a branch 

Tanto el tronco y la rama de la característica completado están al día sin cambios locales. ¿Qué está pasando?

Respuesta

1

Parece que lo he ramificado mal o mal. No he resuelto cómo solucionar esto de la manera correcta, para cualquiera que se encuentre en esta situación aquí es cómo obtuve mis cambios en el baúl conservando la mayor parte de la historia de esta rama efímera:

Buscar todos sus archivos que cambiaron diff -ur trunk branch. Asegúrate de mirar a través de los diff ya que cualquier cambio en el trunk que no esté en la rama se revertirá, así que ignora esos archivos o si hay cambios en un archivo en ambos árboles, asegúrate de editar el diff manualmente más tarde.

Copiar todos los archivos nuevos con SVN para preservar su historia svn cp branch/path/file trunk/path/file

Ahora sólo tiene los cambios en los archivos que no cambiaron. No se puede hacer una fusión de dos fuentes porque (al menos en svn 1.7 en cygwin) se eliminará y luego se agregará el archivo, borrando el historial. La opción que elegí fue construir/aplicar un parche y hacer un mensaje de compromiso sobre lo que sucedió.

Hay muchbetter lugares para aprender a aplicar parches, pero a continuación se muestra lo que hice. Tenga en cuenta que tendrá que corregir manualmente sus problemas de fusión si tiene archivos que se cambiaron en ambos árboles.

Construya su parche con diff -u trunk/path/file branch/path/file >> patch.patch Haga esto para cada archivo, o pase de nuevo en el indicador recursivo y haga el trabajo difícil.

hacer un ensayo para asegurarse de que funcione el parche y obtiene los archivos correctos parcheado patch -p0 --dry-run < patch.patch Entonces parche patch -p0 < patch.patch

A continuación, asegúrese de que el proyecto se basa y comprobar que funciona en.

Dejando abierta la cuestión de espera que alguien sepa la verdadera respuesta.

6

Tuve este error.

Su pregunta fue casi el único resultado de google (here is a description of the keywords).

Tenía una rama larga con otras ramas fusionadas en ella ... el proceso de parche iba a ser largo y difícil. Así que a pesar de que This section of the SVN redbood sugiere que debe unir dos copias de trabajo, intenté de manera optimista reintegrarme desde la URL y ¡funcionó!

cd myLocalTrunk 
svn merge --reintegrate https://svn.blah.blah/blah/blah/branches/myBranch 
svn ci -m "reintegrating myBranch into trunk" 
0

En general, no hay necesidad de utilizar parches-archivos aquí - cualquier "-c x" o "r x: y" rango es en realidad un conjunto de cambios, es decir, una especie de parche que se puede aplicar. Vamos a hacer un ejemplo completo, por lo que inicialmente

svn copy trunk/path/file branch/path/file 

y después de eso uno puede trabajar en el maletero. Ahora lo que necesita saber la revisión de rango para aplicar los cambios a la meta - ya que el número de revisión es global, puede solicitar ambos archivos, por ejemplo

svn info trunk/path/file 
# 35 

svn info branch/path/file 
# 27 

Este es el rango de usar, ahora se puede decir

svn merge -r 27:35 trunk/path/file branch/path/file 

es posible pensar en ella como si se está creando un archivo de revisión interna para la gama 27:35 se aplica a la meta. Siempre que esto sea solo archivo a archivo, ni siquiera puede obtener un conflicto de árbol (piense en los archivos renombrados en una fusión de directorio).

Cuestiones relacionadas