¿Puedo actualizar una rama desde el tronco sin realizar una fusión?


Probablemente no lo he pensado bien, o tal vez simplemente desconozco una opción ya existente en Subversion (ciertamente no soy un experto).

Me pregunto, si he creado una rama para empezar a trabajar en alguna nueva característica, si hay una manera más fácil de mantener la rama actualizada con las revisiones más recientes de trunk sin tener que pasar por todos los problemas de fusionar un rango de revisiones. Me gustaría poder simplemente actualizar y obtener todas las revisiones desde el tronco ( y la rama, por supuesto), mientras que mis cambios confirmados solo afectan a la rama. Es esto posible? ¿Tiene sentido lo que estoy pidiendo?

Supongo que esto no es necesariamente diferente de fusionar un rango de revisiones; es solo que uso AnkhSVN, que realiza todas estas comprobaciones de mejores prácticas antes de permitir una fusión, y a veces se siente como que es mucho más complicado de lo que necesita ser. La idea es que quiero mantener mi sucursal actualizada con cualquier commits otros desarrolladores pueden estar haciendo al tronco para que cuando finalmente haga fusionar mi rama en el tronco, todo va (como) suavemente (como sea posible).

Author: Michael Hackner, 2010-03-03

5 answers

Mantener su rama actualizada con las últimas comprobaciones del tronco se denomina fusión.

Sé que la fusión puede ser una pesadilla real a veces, pero esto es precisamente lo que es la fusión.

 32
Author: Jack Marchetti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-03 15:22:48

TL; DR; No debe fusionarse, aquí hay algunas instrucciones

No es tan malo como crees que es. Describiré los pasos de la línea de comandos que utilizo. Voy a utilizar vimidiff para gestionar los conflictos que puede utilizar Meld o alguna otra herramienta de diferencias que te gusta. Las órdenes están precedidas por el hash ' # ' mark

<in branch first time from copy>
# svn log --stop-on-copy | tail 
<read the revision that was the copy instruction in this case r229>
# cd ../../trunk
# svn up
<I make note of the latest rivision which is r334>
<now I go back to the branch>
# cd ../branches/branch 
# svn merge -r229:334 svn://url.to.svn.server/project/trunk
<a whole bunch of stuff happens>
< now I check for conflicts >
# svn status | grep ^C
<which outputs something like>
C       public/tools/Diagnostic.class.php
C       public/domain/Report_Setup_Parameter.class.php
C       public/modules/mReports.module.php
<I now revert all these and manually merge them>
# svn revert public/tools/Diagnostic.class.php
...
<revert done now manuall doinng the merge
# vimdiff public/tools/Diagnostic.class.php ../../trunk/public/tools/Diagnostic.class.php
...
<now all the changes are done>
# svn commit -m "Merging trunk into branch 'branch' r:229:334"
commited revision 335

Hecho, si lo haces regularmente entonces no hay muchos cambios. Después de la primera fusión necesita usar el # de revisión de la última fusión. Por lo tanto, algún tiempo en el en el futuro, el comando buscaría en el svn log para encontrar cuándo fue la revisión de la última fusión, en este caso 335. El comando merge se vería como thuse

# svn merge -r335:370 svn://url.to.svn.server/project/trunk

Todos los demás pasos son los mismos.

 23
Author: flaxeater,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-03 15:36:05

La idea es que quiero mantener mi branch actualizado con cualquier confirmación otros desarrolladores pueden estar haciendo a la baúl para que cuando finalmente lo haga fusionar mi rama en el tronco, todo va (como) suavemente (como posible).

Para lograr eso necesita hacer fusiones de revisión de rango desde trunk. En realidad, es una buena práctica hacer este tipo de fusión a una rama de vez en cuando para estar al día con lo que está sucediendo en el tronco.

No se las herramientas para AnkhSVN, pero' pure ' SVN tiene muy buenas herramientas que hacen que las operaciones de fusión sean bastante simples. TortoiseSVNes una gran herramienta para Windows y si te gusta Netbeans también hay un soporte gráfico muy bueno para merge.

 3
Author: pajton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-03 15:21:22

No estoy familiarizado con AnkhSVN, pero lo que estás describiendo es exactamente para lo que svn merge es. Así que la respuesta a tu pregunta es no.

Sin embargo, puedes revisar la opción --reintegrate para ver si eso te hace la vida más fácil.

Ver estas entradas del blog:

Subversion merge reintegrar
Subversion 1.5 merge-tracking en pocas palabras

 0
Author: Michael Hackner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-03 15:21:16

Si estás usando PhpStorm puedes intentar usar la interfaz GUI https://www.jetbrains.com/help/idea/2016.1/integrating-changes-to-from-feature-branches.html

 0
Author: max4ever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-31 13:57:27