2010-09-24 22 views
6

Estoy tratando de mantener actualizada una rama de función mediante la fusión del tronco en la rama. El problema es que aproximadamente 2000 archivos que estaban allí cuando se creó la rama, y ​​que se han dejado intactos tanto en la rama como en el tronco, se están actualizando con nada más que svn: mergeinfo. El proyecto es de gran escala, y el impacto en nuestro historial de SVN es tan grande que hace que el historial de compromisos de fusión sea inutilizable, ya que marca literalmente miles de archivos modificados, aunque el único cambio en estos archivos es hecho por SVN en sí.¿Cómo evito un gran número de svn: mergeInfo al fusionar el tronco a una rama de entidad en el SVN

He tratado

  • Utilizando la misma versión de cliente como el Repo (1.5.2)
  • Usando mi actual versión del cliente 1.6.10
  • La fusión de un rango de revisiones, desde el principio hasta el ramal cabecera

Debo mencionar que he estado observando detenidamente la documentación de SVN al intentar esto. Por lo tanto, no se deben romper las reglas (por ejemplo, no hay subárboles conmutados, copia local limpia, etc.)

Respuesta

8

Bascially para limpiar el depósito tiene que ejecutar lo siguiente en su rama de integración para que los ventiladores de cambio de allí: -

C:> SVN SVN propdel: mergeinfo -R

es decir, que hágalo en el maletero para que la versión futura y las ramas de características no estén contaminadas. Al fusionar las sucursales existentes, puede ignorar todos los cambios de svn: merginfo debajo de la "raíz de combinación", ya que se heredarán de todos modos.

escribí un blog sobre este tema hace un tiempo que la cubre con más detalle: -

la limpieza de SVN: mergeinfo los excrementos de http://chrisoldwood.blogspot.com/2010/03/cleaning-up-svnmergeinfo-droppings.html

+0

gracias por esta explicación más profunda de cómo deshacerse de él. – NielsBjerg

+1

Si bien eliminar mergeinfo es un enfoque de uso frecuente, no es el RightWay (tm) para hacerlo; ver la respuesta de slowdog para más sobre esto. – retracile

1

Si tiene dicha mergeinfo en archivos que realmente no se han modificado, usted u otra persona no se fusiona desde la raíz de la copia de trabajo. . La única solución es eliminar el svn: mergeinfo de los archivos, ya que la única ubicación está en la raíz de la copia de trabajo en ningún otro lugar. Y un punto adicional debe actualizar el repositorio a 1.6.X ..

+0

¿La actualización del repositorio eliminará estos problemas o solo piensa en las mejores prácticas? – NielsBjerg

+0

Además, si evito la fusión de subárbol en el futuro, ¿escaparé de estos problemas? ¿O acaso la información de fusión me perseguirá para siempre? – NielsBjerg

6

svn agregará propiedades de mergeinfo a archivos individuales si cree que su historial de fusión difiere del de su directorio principal. Una vez que esto haya sucedido, cada combinación, sin importar cuán inofensivo sea, hará que esas propiedades de mergeinfo se actualicen. Encontré la primera mitad de this article útil para entender por qué sucede eso.

Si desea evitar estos cambios constantes mergeinfo, tendrá que "poner en orden" las propiedades de mergeinfo existentes en su sucursal. La forma más segura, pero más laboriosa, es ejecutar svn propget -R svn:mergeinfo en la rama, y ​​luego estudiar las diferencias entre mergeinfo en archivos individuales y mergeinfo de su directorio padre. Puede encontrar que las diferencias son pequeñas, y que "svn fusionar" un pequeño número de revisiones individuales será suficiente para desencadenar mergeinfo elision, haciendo que desaparezcan todas las propiedades de mergeinfo individuales.

Si está seguro de que comprende cómo funciona mergeinfo, también puede simplemente ingresar y editar o eliminar manualmente mergeinfo de los archivos ofensivos.

+0

Mi comprensión, basada principalmente en este artículo: http://www.collab.net/community/subversion/articles/merge-info.html es, que nunca debería editar el svn: mergeInfo a mano ...? – NielsBjerg

+0

Diría que no debe editar mergeinfo a mano a menos que comprenda lo que está haciendo y por qué lo hace. Fusionar revisiones específicas en directorios particulares para obtener los cambios de mergeinfo que desea (es decir, mergeinfo más uniforme, para que cada archivo ya no cambie con cada fusión) es una idea mucho mejor, y generalmente todo lo que necesita. El uso de la opción "--record-only" es el siguiente método "más travieso". La edición manual es el último recurso. En un sentido más amplio, nada de esto "debería" ser necesario: svn's mergeinfo elision debería ser más inteligente de lo que es. Tal vez dentro de unos años sea: -/ – slowdog

+0

Ver también [este artículo muy detallado] (http://blogs.collab.net/subversion/2008/05/subversion-15-m/). – retracile

0

Como no estoy seguro con ciega eliminación svn:merge-info propiedad, han implementado una herramienta para analizar la situación actual en una copia de trabajo y eliminar tantas revisiones de fusión como sea posible desde propiedades de información de fusión no raíz. Después de verificaciones y controles humanos adicionales, se pueden confirmar los cambios en la copia de trabajo.

aquí está: svn-clean-mergeinfo

No dude en informar de cualquier problema acerca de su uso conseguirlo mejorado.

Cuestiones relacionadas