comparison es/branch.tex @ 630:d2b1369e58d0

passed the file through spell check also corrected a couple of redaction problems
author Javier Rojas <jerojasro@devnull.li>
date Sun, 25 Jan 2009 11:40:32 -0500
parents 801442e58e6d
children f7a2c5959d48
comparison
equal deleted inserted replaced
629:04977ab515f6 630:d2b1369e58d0
1 %% vim: tw=70 encoding=utf8 1 %% vim: tw=70 encoding=utf8
2 \chapter{Administración de versiones y desarrollo ramificado} 2 \chapter{Administración de versiones y desarrollo ramificado}
3 \label{chap:branch} 3 \label{chap:branch}
4 4
5 Mercurial ofrece varios mecanismos que le permitirán administrar un 5 Mercurial ofrece varios mecanismos que le permiten administrar un
6 proyecto que avanza en múltiples frentes simultáneamente. Para 6 proyecto que avanza en múltiples frentes simultáneamente. Para
7 entender estos mecanismos, demos un vistazo a la estructura usual de 7 entender estos mecanismos, demos un vistazo a la estructura usual de
8 un proyecto de software. 8 un proyecto de software.
9 9
10 Muchos proyectos de software liberan una versión ``mayor'' que contiene 10 Muchos proyectos de software liberan una versión ``mayor'' que contiene
60 Al desplegar la orden \hgcmd{tags}, las etiquetas se listan en orden 60 Al desplegar la orden \hgcmd{tags}, las etiquetas se listan en orden
61 inverso, por número de revisión. Lo que significa usualmente que las etiquetas más recientes se listan antes que las más antiguas. También 61 inverso, por número de revisión. Lo que significa usualmente que las etiquetas más recientes se listan antes que las más antiguas. También
62 significa que la etiqueta \texttt{tip} siempre aparecerá como primera 62 significa que la etiqueta \texttt{tip} siempre aparecerá como primera
63 etiqueta listada al desplegar la orden \hgcmd{tags}. 63 etiqueta listada al desplegar la orden \hgcmd{tags}.
64 64
65 Cuando ejecuta \hgcmd{log}, se desplegará la revisión que tenga las etiquetas asociados a ella, se imprimirán tales etiquetas. 65 Cuando ejecuta \hgcmd{log}, se desplegará la revisión que tenga las etiquetas asociadas a ella, se imprimirán tales etiquetas.
66 \interaction{tag.log} 66 \interaction{tag.log}
67 67
68 Siempre que requiera indicar un ~ID de revisión a una orden de 68 Siempre que requiera indicar un~ID de revisión a una orden de
69 Mercurial, aceptará un nombre de etiqueta en su lugar. Internamente, 69 Mercurial, aceptará un nombre de etiqueta en su lugar. Internamente,
70 Mercurial traducirá su nombre de etiqueta en el ~ID de revisión 70 Mercurial traducirá su nombre de etiqueta en el~ID de revisión
71 correspondiente, y lo usará. 71 correspondiente, y lo usará.
72 \interaction{tag.log.v1.0} 72 \interaction{tag.log.v1.0}
73 73
74 No hay límites en la cantidad de etiquetas por reposirorio, o la cantidad 74 No hay límites en la cantidad de etiquetas por repositorio, o la cantidad
75 de etiquetas que una misma revisión pueda tener. Siendo prácticos, no es 75 de etiquetas que una misma revisión pueda tener. Siendo prácticos, no es
76 muy buena idea tener ``demasiados'' (la cantidad variará de un 76 muy buena idea tener ``demasiados'' (la cantidad variará de un
77 proyecto a otro), debido a que la intención es ayudarle a encontrar 77 proyecto a otro), debido a que la intención es ayudarle a encontrar
78 revisiones. Si tiene demasiados tags, la facilidad para identificar 78 revisiones. Si tiene demasiados tags, la facilidad para identificar
79 revisiones disminuirá rápidamente. 79 revisiones disminuirá rápidamente.
119 seguido por el nombre de una etiqueta. 119 seguido por el nombre de una etiqueta.
120 120
121 Si está resolviendo un conflicto en el fichero \sfilename{.hgtags} 121 Si está resolviendo un conflicto en el fichero \sfilename{.hgtags}
122 durante una fusión, hay un detalle para tener en cuenta al modificar 122 durante una fusión, hay un detalle para tener en cuenta al modificar
123 el fichero \sfilename{.hgtags}: 123 el fichero \sfilename{.hgtags}:
124 cuando Mercurial parsea las etiquetas en el repositorio \emph{nunca} 124 cuando Mercurial procesa las etiquetas en el repositorio \emph{nunca}
125 lee la copia de trabajo del fichero \sfilename{.hgtags}. En cambio, 125 lee la copia de trabajo del fichero \sfilename{.hgtags}. En cambio,
126 lee la versión \emph{consignada más reciente} del fichero. 126 lee la versión \emph{consignada más reciente} del fichero.
127 127
128 Una consecuencia desafortunada de este diseño es que usted no puede 128 Una consecuencia desafortunada de este diseño es que usted no puede
129 verificar que su fichero \sfilename{.hgtags} fusionado es correcto hasta 129 verificar que su fichero \sfilename{.hgtags} fusionado es correcto hasta
130 \emph{después} de haber consignado (hecho commit). Así que si se 130 \emph{después} de haber consignado un cambio. Así que si se
131 encuentra resolviendo un conflicto en \sfilename{.hgtags} durante una 131 encuentra resolviendo un conflicto en \sfilename{.hgtags} durante una
132 fusión, asegúrese de ejecutar la orden \hgcmd{tags} después de 132 fusión, asegúrese de ejecutar la orden \hgcmd{tags} después de
133 consignar. Si encuentra un error en el fichero \sfilename{.hgtags}, 133 consignar. Si encuentra un error en el fichero \sfilename{.hgtags},
134 reportará el lugar del error, que podrá arreglar y después 134 reportará el lugar del error, que podrá arreglar y después
135 consignar. Posteriormente ejecute de nuevo la orden \hgcmd{tags} para 135 consignar. Posteriormente ejecute de nuevo la orden \hgcmd{tags} para
159 Dado que las etiquetas de Mercurial están controladas por revisiones y se 159 Dado que las etiquetas de Mercurial están controladas por revisiones y se
160 llevan en el historial del proyecto, todas las personas involucradas 160 llevan en el historial del proyecto, todas las personas involucradas
161 verán las etiquetas que usted haya creado. El hecho de dar nombres a las 161 verán las etiquetas que usted haya creado. El hecho de dar nombres a las
162 revisiones tiene usos más allá que simplemente hacer notar que la 162 revisiones tiene usos más allá que simplemente hacer notar que la
163 revisión \texttt{4237e45506ee} es realmente \texttt{v2.0.2}. Si está 163 revisión \texttt{4237e45506ee} es realmente \texttt{v2.0.2}. Si está
164 tratando de encontrar un bug sutil, posiblemente desearía colocar una 164 tratando de encontrar un fallo sutil, posiblemente desearía colocar una
165 etiqueta recordándole algo como ``Ana vio los síntomas con esta revisión''. 165 etiqueta recordándole algo como ``Ana vio los síntomas con esta revisión''.
166 166
167 Para estos casos, lo que posiblemente desearía serían tags 167 Para estos casos, lo que posiblemente desearía serían tags
168 \emph{locales}. Puede crear una etiqueta local con la opción \hgopt{tag}{-l} 168 \emph{locales}. Puede crear una etiqueta local con la opción \hgopt{tag}{-l}
169 de la orden \hgcmd{tag}. Esto guardará la etiqueta en un fichero llamado 169 de la orden \hgcmd{tag}. Esto guardará la etiqueta en un fichero llamado
177 Retomando lo mencionado en el comienzo de un capítulo, pensemos en el 177 Retomando lo mencionado en el comienzo de un capítulo, pensemos en el
178 hecho de que un proyecto tiene muchas piezas concurrentes de trabajo 178 hecho de que un proyecto tiene muchas piezas concurrentes de trabajo
179 en desarrollo al mismo tiempo. 179 en desarrollo al mismo tiempo.
180 180
181 Puede haber prisa por una nueva versión ``principal''; Un nueva 181 Puede haber prisa por una nueva versión ``principal''; Un nueva
182 versión con un rreglo de fallo a la última versión; y una versión de 182 versión con un arreglo de fallo a la última versión; y una versión de
183 ``mantenimiento correctivo'' a una versión antigua que ha entrado en 183 ``mantenimiento correctivo'' a una versión antigua que ha entrado en
184 modo de mantenimiento. 184 modo de mantenimiento.
185 185
186 Usualmente la gente se refiere a esas direcciones 186 Usualmente la gente se refiere a esas direcciones
187 concurrentes de desarrollo es como ``ramas''. Aunque hemos visto que 187 concurrentes de desarrollo es como ``ramas''. Aunque hemos visto que
215 fallo debería dirigirse a la liberación de versión~1.0.1 que viene en 215 fallo debería dirigirse a la liberación de versión~1.0.1 que viene en
216 camino, ellos clonarían el repositorio \texttt{myproject-1.0.1}, 216 camino, ellos clonarían el repositorio \texttt{myproject-1.0.1},
217 harían sus cambios y los publicarían (con push). 217 harían sus cambios y los publicarían (con push).
218 \interaction{branch-repo.bugfix} 218 \interaction{branch-repo.bugfix}
219 Mientras tanto, el desarrollo para la siguiente versión mayor puede 219 Mientras tanto, el desarrollo para la siguiente versión mayor puede
220 continuar asilada e incólume, en el repositorio \texttt{myproject}. 220 continuar aislada e incólume, en el repositorio \texttt{myproject}.
221 \interaction{branch-repo.new} 221 \interaction{branch-repo.new}
222 222
223 \section{No repita trabajo: fusión entre ramas} 223 \section{No repita trabajo: fusión entre ramas}
224 224
225 En muchos casos, cuando tiene un fallo para arreglar en una rama de 225 En muchos casos, cuando tiene un fallo para arreglar en una rama de
229 mismo fallo muchas veces, por tanto, veremos varias alternativas con 229 mismo fallo muchas veces, por tanto, veremos varias alternativas con
230 las que Mercurial puede ayudarle a administrar tales arreglos de fallo 230 las que Mercurial puede ayudarle a administrar tales arreglos de fallo
231 sin duplicar su trabajo. 231 sin duplicar su trabajo.
232 232
233 En el caso más sencillo, basta con jalar los cambios de la rama de 233 En el caso más sencillo, basta con jalar los cambios de la rama de
234 mantenimiento a la rama obetivo en su clon local. 234 mantenimiento a la rama objetivo en su clon local.
235 \interaction{branch-repo.pull} 235 \interaction{branch-repo.pull}
236 A continuación deberá mezclar las cabezas de las dos ramas, y publicar 236 A continuación deberá mezclar las cabezas de las dos ramas, y publicar
237 de nuevo a la rama principal. 237 de nuevo a la rama principal.
238 \interaction{branch-repo.merge} 238 \interaction{branch-repo.merge}
239 239
247 nuevos a Mercurial) para trabajar con los ficheros dentro de su 247 nuevos a Mercurial) para trabajar con los ficheros dentro de su
248 rama/repositorio. 248 rama/repositorio.
249 249
250 Si se encuentra más en la categoría ``usuario diestro'' (\emph{y} sus 250 Si se encuentra más en la categoría ``usuario diestro'' (\emph{y} sus
251 colaboradores también), puede considerar otra alternativa para 251 colaboradores también), puede considerar otra alternativa para
252 administrar las ramas. He mencionador con anterioridad la distinción a 252 administrar las ramas. He mencionado con anterioridad la distinción a
253 nivel humano entre las ramas estilo ``cuadro pequeño'' y ``gran 253 nivel humano entre las ramas estilo ``cuadro pequeño'' y ``gran
254 cuadro''. Mientras que Mercurial trabaja con muchas ramas del estilo 254 cuadro''. Mientras que Mercurial trabaja con muchas ramas del estilo
255 ``cuadro pequeño'' en el repositorio todo el tiempo (por ejemplo cuando 255 ``cuadro pequeño'' en el repositorio todo el tiempo (por ejemplo cuando
256 usted jala cambios, pero antes de fusionarlos), \emph{también} puede 256 usted jala cambios, pero antes de fusionarlos), \emph{también} puede
257 trabajar con varias ramas del ``cuadro grande''. 257 trabajar con varias ramas del ``cuadro grande''.
292 Nada cambia en el directorio actual, y no se ha añadido nada al 292 Nada cambia en el directorio actual, y no se ha añadido nada al
293 historial. Esto sugiere que al ejecutar la orden \hgcmd{branch} no hay 293 historial. Esto sugiere que al ejecutar la orden \hgcmd{branch} no hay
294 un efecto permanente; solamente le indica a que nombre de rama usará 294 un efecto permanente; solamente le indica a que nombre de rama usará
295 la \emph{próxima} vez que consigne un conjunto de cambios. 295 la \emph{próxima} vez que consigne un conjunto de cambios.
296 296
297 Cuando consigna un cambio, Mercurial alamacena el nombre de la rama en 297 Cuando consigna un cambio, Mercurial almacena el nombre de la rama en
298 la cual consignó. Una vez que haya cambiado de la rama \texttt{default} 298 la cual consignó. Una vez que haya cambiado de la rama \texttt{default}
299 y haya consignado, verá que el nombre de la nueva rama se mostrará 299 y haya consignado, verá que el nombre de la nueva rama se mostrará
300 cuando use la orden \hgcmd{log}, \hgcmd{tip}, y otras órdenes que 300 cuando use la orden \hgcmd{log}, \hgcmd{tip}, y otras órdenes que
301 desplieguen la misma clase de información. 301 desplieguen la misma clase de información.
302 \interaction{branch-named.commit} 302 \interaction{branch-named.commit}
319 Si tiene más de una rama nombrada en un repositorio, Mercurial 319 Si tiene más de una rama nombrada en un repositorio, Mercurial
320 recordará la rama en la cual está su directorio de trabajo cuando 320 recordará la rama en la cual está su directorio de trabajo cuando
321 invoque una orden como \hgcmd{update} o \hgcmdargs{pull}{-u}. Se 321 invoque una orden como \hgcmd{update} o \hgcmdargs{pull}{-u}. Se
322 actualizará su directorio de trabajo actual al tip de esta rama, sin 322 actualizará su directorio de trabajo actual al tip de esta rama, sin
323 importar cuál sea el tip ``a lo largo del repositorio''. Para 323 importar cuál sea el tip ``a lo largo del repositorio''. Para
324 actualiar a una revisión que está en una rama con distinto nombre, 324 actualizar a una revisión que está en una rama con distinto nombre,
325 puede necesitar la opción \hgopt{update}{-C} de \hgcmd{update}. 325 puede necesitar la opción \hgopt{update}{-C} de \hgcmd{update}.
326 326
327 Este comportamiento puede ser sutil, veámoslo en acción. Primero, 327 Este comportamiento puede ser sutil, veámoslo en acción. Primero,
328 recordemos en qué rama estamos trabajando, y qué ramas están en 328 recordemos en qué rama estamos trabajando, y qué ramas están en
329 nuestro repositorio. 329 nuestro repositorio.
346 \interaction{branch-named.foo-commit} 346 \interaction{branch-named.foo-commit}
347 347
348 \section{Nombres de ramas y fusiones} 348 \section{Nombres de ramas y fusiones}
349 349
350 Posiblemente ha notado que las fusiones en Mercurial no son simétricas. 350 Posiblemente ha notado que las fusiones en Mercurial no son simétricas.
351 Supongamos que su repositorio tiene dos cabezas, 17 and 23. Si yo invoco 351 Supongamos que su repositorio tiene dos cabezas, 17 y 23. Si yo invoco
352 \hgcmd{update} a 17 y aplico \hgcmd{merge} a 23, Mercurial almacena 17 352 \hgcmd{update} a 17 y aplico \hgcmd{merge} a 23, Mercurial almacena 17
353 como el primer padre de la fusión, y 23 como el segundo. Mientras que 353 como el primer padre de la fusión, y 23 como el segundo. Mientras que
354 si hago \hgcmd{update} a 23 y después aplico \hgcmd{merge} con 17, 354 si hago \hgcmd{update} a 23 y después aplico \hgcmd{merge} con 17,
355 grabará a 23 como el primer padre, y 17 como el segundo. 355 grabará a 23 como el primer padre, y 17 como el segundo.
356 356
357 Esto afecta com elige Mercurial el nombre de la rama cuando hace 357 Esto afecta el cómo elige Mercurial el nombre de la rama cuando hace
358 fusión. Después de una fusión Mercurial mantendrá el nombre de la 358 fusión. Después de una fusión Mercurial mantendrá el nombre de la
359 rama del primer padre cuando consigne el resultado de una fusión. Si 359 rama del primer padre cuando consigne el resultado de una fusión. Si
360 el primer nombre de su padre es \texttt{foo}, y fusiona con 360 el primer nombre de su padre es \texttt{foo}, y fusiona con
361 \texttt{bar}, el nombre de la rama continuará siendo \texttt{foo} 361 \texttt{bar}, el nombre de la rama continuará siendo \texttt{foo}
362 después de fusionar. 362 después de fusionar.
371 Pero si estoy trabajando en la rama \texttt{bar}, y fusiono el trabajo 371 Pero si estoy trabajando en la rama \texttt{bar}, y fusiono el trabajo
372 desde la rama \texttt{foo}, el resultado permanecerá en la rama 372 desde la rama \texttt{foo}, el resultado permanecerá en la rama
373 \texttt{bar}. 373 \texttt{bar}.
374 \interaction{branch-named.merge} 374 \interaction{branch-named.merge}
375 375
376 En un ejemplo más concreo, si yo estoy trabajando en la rama 376 En un ejemplo más concreto, si yo estoy trabajando en la rama
377 \texttt{bleeding-edge}, y deseo traer los arreglos más recientes de la 377 \texttt{bleeding-edge}, y deseo traer los arreglos más recientes de la
378 rama \texttt{estable}, Mercurial elegirá el nombre de rama ``correcto'' 378 rama \texttt{estable}, Mercurial elegirá el nombre de rama ``correcto''
379 (\texttt{bleeding-edge}) cuando yo jale una fusión desde \texttt{estable}. 379 (\texttt{bleeding-edge}) cuando yo jale una fusión desde \texttt{estable}.
380 380
381 \section{Normalmente es útil nombrar ramas} 381 \section{Normalmente es útil nombrar ramas}