Mercurial > hgbook
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} |