hgbook

view es/intro.tex @ 409:04ba1c7785ae

Fixing build prevention, goofy translator. Taking a new chapter
author Igor TAmara <igor@tamarapatino.org>
date Sun Nov 09 23:50:07 2008 -0500 (2008-11-09)
parents 56914d368af4
children cf6b9bf14af7
line source
1 \chapter{Introducción}
2 \label{chap:intro}
4 \section{Acerca del control de revisiones}
6 El control de revisiones es el proceso de administrar diferentes
7 versiones de una pieza de información. En su forma más simple es algo
8 que la mayoría de gente hace a mano: cada vez que usted modifica un
9 fichero, lo graba con un nuevo nombre que contiene un número, el
10 siguiente mayor que el anterior.
12 Administrar manualmente muchas versiones de un fichero es una tarea
13 propensa a errores, a pesar de que hace bastante tiempo hay
14 herramientas que ayudan en este proceso. Las primeras herramientas
15 para automatizar el control de revisiones fueron pensadas para que un
16 usuario administrara un solo fichero. En las décadas pasadas, el
17 alcance de las herramientas de control de revisiones ha ido aumentando
18 considerablemente; ahora manejan muchos ficheros y facilitan el
19 trabajo en conjunto de varias personas. Las mejores herramientas de
20 control de revisiones de la actualidad no tienen problema con miles de
21 personas trabajando en proyectos que consisten de decenas de miles de
22 ficheros.
24 \subsection{¿Por qué usar control de revisiones?}
26 Hay muchas razones por las cuales usted o su equipo desearía usar una
27 herramienta automática de control de revisiones para un proyecto.
28 \begin{itemize}
29 \item Contar con la historia y la evolución de su proyecto, para
30 evitar hacer la tarea manualmente. Por cada cambio tendrá una
31 bitácora de \emph{quién} lo hizo; \emph{por qué} se hizo;
32 \emph{cuándo} se hizo; y de \emph{qué} se trataba el cambio.
33 \item Cuando trabaja con más personas, los programas de control de
34 revisiones facilitan la colaboración. Por ejemplo, cuando varias
35 personas de forma casi simultanea pueden hacer cambios
36 incompatibles, el programa le ayudará a identificar y resolver tales
37 conflictos.
38 \item Puede ayudarle a recuperarse de equivocaciones. Si aplica un
39 cambio que posteriormente se evidencia como un error, puede
40 revertirlo a una versión previa a uno o muchos ficheros. De hecho,
41 una herramienta \emph{realmente} buena, incluso puede ayudarle
42 efectivamente a darse cuenta exactamente cuándo se introdujo el
43 error( para más detalles ver la sección~\ref{sec:undo:bisect}).
44 \item Le permitirá trabajar simultáneamente, y manejar las diferencias
45 entre múltiples versiones de su proyecto.
46 \end{itemize}
47 La mayoría de estas razones son igualmente validas ---por lo menos en
48 teoría--- así esté trabajando en un proyecto solo, o con mucha gente.
50 Algo fundamental acerca de lo práctico de un sistema de control de
51 revisiones en estas dos escalas (``un hacker solo'' y ``un equipo
52 gigantesco'') es cómo se comparan los \emph{beneficios} con los
53 \emph{costos}. Una herramienta de control de revisiones que sea
54 difícil de entender o usar impondrá un costo alto.
56 Un proyecto de quinientas personas es muy propenso a colapsar
57 solamente con su peso inmediatamente sin una herramienta de control de
58 versiones y un proceso. En este caso, el costo de usar control de
59 revisiones ni siquiera se tiene en cueant, puesto que \emph{sin} él,
60 el fracaso está casi garantizado.
62 Por otra parte, un ``arreglo rápido'' de una sola persona, excluiría
63 la necesidad de usar una herramienta de control de revisiones, porque
64 casi seguramente, el costo de usar una estaría cerca del costo del
65 proyecto. ¿No es así?
67 Mercurial solamente soporta \emph{ambas} escalas de de
68 desarrollo. Puede aprender lo básico en pocos minutos, y dado su bajo
69 sobrecosto, puede aplicar el control de revisiones al proyecto más
70 pequeño con facilidad. Su simplicidad significa que no tendrá que
71 preocuparse por conceptos obtusos o secuencias de órdenes compitiendo
72 por espacio mental con lo que sea que \emph{realmente} esté tratando
73 de hacer. Al mismo tiempo, Mercurial tiene alto desempeño y su
74 naturaleza peer-to-peer le permite escalar indoloramente para manejar
75 grandes proyectos.
77 Ninguna herramienta de control de revisiones puede salvar un
78 proyecto mal administrado, pero la elección de herramientas puede
79 hacer una gran diferencia en la fluidez con la cual puede trabajar en
80 el proyecto.
82 \subsection{La cantidad de nombres del control de revisiones}
84 El control de revisiones es un campo amplio, tan ampli que no hay un
85 acrónimo o nombre único. A continuación presentamos un listado de
86 nombres comunes y acrónimos que se podrían encontrar:
87 \begin{itemize}
88 \item Control de revisiones (RCS)
89 \item Manejo de Configuraciones de Programas(SCM), o administracón de
90 configuraciones
91 \item Administración de código fuente
92 \item Control de Código Fuente, o Control de Fuentes
93 \item Control de Versiones(VCS)
94 \end{itemize}
95 Algunas personas aducen que estos términos tienen significados
96 diversos, pero en la práctica se sobrelapan tanto que no hay un
97 acuerdo o una forma adecuada de separarlos.
99 \section{Historia resumida del control de revisiones}
101 La herramienta de control de revisiones más antigua conocida es SCCS
102 (Sistema de Control de Código), escrito por Marc Rochkind en Bell
103 Labs, a comienzos de los setentas(1970s). SCCS operaba sobre ficheros
104 individuales, y requería que cada persona que trabajara en el proyecto
105 tuviera acceso a un espacio compartido en un solo sistema. Solamente
106 una persona podía modificar un fichero en un momento dado; el
107 arbitramiento del acceso a los ficheros se hacía con candados. Era
108 común que la gente pusiera los candados a los ficheros, y que
109 posteriormente olvidara quitarlos, impidiendo que otro pudiera
110 modificar los ficheros en cuestión sin la intervención del
111 administrador.
113 Walter Tichy desarrolló una alternativa gratutita a SCCS a comienzos
114 de los ochentas(1980s), llamó a su programa RCS(Sistema de Control de
115 Revisiones). Al igual que SCCS, RCS requería que los desarrolladores
116 trabajaran en un único espacio compartido y colocaran candados a los
117 ficheros para evitar que varias personas los estuvieran modificando
118 simultáneamente.
120 Después en los ochenta, Dick Grune usó RCS como un bloque de
121 construcción para un conjunto de guiones de línea de comando, que
122 inicialmente llamó cmt, pero que renombró a CVS(Sistema Concurrente de
123 Versiones). La gran innovación de CVS era que permitía a los
124 desarrolladores trabajar simultáneamente de una forma más o menos
125 independiente en sus propios espacios de trabajo. Los espacios de
126 trabajo personales impedian que los desarrolladores se pisaran las
127 mangueras todo el tiempo, situación común con SCCS y RCS. Cada
128 desarrollador tenía una copia de todo el fichero del proyecto y podía
129 modificar su copia independientemente, Tenían que fusionar sus
130 ediciones antes de consignar los cambios al repositorio central.
132 Brian Berliner tomó los scripts originales de Grune y los reescribió
133 en~C, haciéndolos públicos en 1989, código sobre el cual se ha
134 desarrollado la versión moderna de CVS. CVS posteriormente adquirió
135 la habilidad de operar sobre una conexión de red, dotándolo de una
136 arquitectura, cliente/servidor. La arquitectura de CVS es
137 centralizada; La historia del proyecto está únicamente en el
138 repositorio central. Los espacios de trabajo de los clientes
139 contienen únicamente copias recientes de las versiones de los
140 ficheros, y pocos metadatos para indicar dónde está el servidor. CVS
141 ha tenido un éxito enorme; Es probablemente el sistema de control de
142 revisiones más extendido del planeta.
144 A comienzos de los noventa(1990s), Sun MicroSystems desarrollo un
145 temprano sistema distribuido de revisión de controles llamado TeamWare
146 Un espacio de trabajo TeamWare contiene una copia completa de la
147 historia del proyecto. TeamWare no tiene la noción de repositorio
148 central. (CVS se basaba en RCS para el almacenamiento de su historia;
149 TeamWare usaba SCCS.)
151 A medida que avanzaba la decada de los noventa, se empezño a
152 evidenciar los problemas de CVS. Alacena cambios simultáneos a muchos
153 ficheros de forma individual, en lugar de agruparlos como una
154 operación única y atómica lógicamente. No maneja bien su jerarquía de
155 ficheros bien; es fácil desordenar un repositorio renombrando ficheros
156 y directorios. Peor aún, su código fuente es difícil de leer y
157 mantener, lo que hace que su ``umbral de dolor'' para arreglar sus
158 problemas arquitecturales algo prohibitivo.
160 En 2001, Jim Blandy y Karl Fogel, dos desarrolladores que habían
161 trabajado en CVS, comenzaron un proyecto para reemplazarlo con una
162 herramienta con mejor arquitectura y código más limpio. El resultado,
163 Subversion, no se separó del modelo centralizado cliente/servidor de
164 CVS, pero añadió consignaciones atómicas de varios ficheros, mejor
165 manejo de nombres de espacios, y otras características que lo hacen
166 mejor que CVS. Desde su versión inicial, ha ido creciendo en
167 popularidad.
169 Más o menos en forma simultánea Graydon Hoare comenzó a trabajar en un
170 sistema distribuido de control de versiones ambicioso que llamó
171 Monotone. Mientras que Monotone se enfocaba a evitar algunas fallas de
172 diseño de CVS con una arquitectura peer-to-peer, fue mucho más
173 allá(junto con otros proyectos subsecuentes) que unas herramientas de
174 control de revisiones en varios aspectos innovadores. Usa hashes
175 criptográficos como identificadores, y tiene una noción integral de
176 ``confianza'' para código de diversas fuentes.
178 Mercurial nació en el 2005. Algunos de sus aspectos de de diseño
179 fueron influenciados por Monotone, pero Mercurial se enfoca en la
180 facilidad de uso, gran rendimiento y escalabilidad para proyectos muy
181 grandes.
183 \section{Tendencias en el control de revisiones}
185 Ha habido varias tendencias en el desarrollo y uso de las herramientas
186 de control de revisiones en las pasadas cuatro décadas, mientras la
187 gente se ha vuelto familiar con las capacidades de sus herramientas
188 así mismo con sus limitaciones.
190 La primera generación comenzó administrando ficheros individuales en
191 computadores por persona. A pesar de que tales herramientas
192 representaron un avance importante frente al control de revisiones
193 manual, su modelo de candados y la limitación a un sólo computador,
194 determinó equipos de trabajo pequeños y acoplados.
196 La segunda generación dejó atrás esas limitaciones moviéndose a
197 arquitecturas centradas en redes, y administrando proyectos completos
198 uno a la vez. A medida que los proyectos crecían, nacieron nuevos
199 problemas. Con la necesidad de comunicación frecuente con los
200 servidores, escalar estas máquinas se convirtió en un problema en
201 proyectos realmente grandes. Las redes con poca estabilidad impidieron
202 que usuarios remotos se conectaran al servidor. A medida que los
203 proyecos de código abierto comenzaron a ofrecer acceso de sólo lectura
204 de forma anónima a cualquiera, la gente sin permiso para consignar,
205 vio que no podían usar tales herramientas para interactuar en un
206 proyecto de forma natural, puesto que no podían guardar sus cambios.
208 La generación actual de herramientas de control de revisiones es de
209 forma natural peer-to-peer. Todos estos sistemas han eliminado la
210 dependencia de un único servidor central, y han permitido que la
211 gente distribuya sus datos de control de revisiones donde realmente se
212 necesita. La colaboración a través de Internet ha cambiado las
213 limitantes tecnológicas a la cuestión de elección y consenso. Las
214 herramientas modernas pueden operar sin conexión indefinidamenta y
215 autónomamente, necesitando una conexión de red solamente para
216 sincronizar los cambios con otro repositorio.
218 \section{Algunas ventajas del control distribuido de revisiones}
220 A pesar de que las herramientas para el control distribuido de
221 revisiones lleva varios años siendo tan robusto y usable como la
222 generación previa de su contraparte, personas que usan herramientas
223 más antiguas no se han percatado de sus ventajas. Hay gran cantidad
224 de situaciones en las cuales las herramientas distribuidas brillan
225 frente a las centralizadas.
227 Para un desarrollador individual, las herramientas distribuidas casi
228 siempre son más rápidas que las centralizadas. Por una razón sencilla:
229 Una herramienta centralizada necesita comunicarse por red para las
230 operaciones más usuales, debido a que los metadatos se almacenan en
231 una sola copia en el servidor central. Una herramienta distribuida
232 almacena todos sus metadatos localmente. Con todo lo demás de la
233 misma forma, comunicarse por red tiene un sobrecosto en una
234 herramienta centralizada. No subestime el valor de una herramienta de
235 respuesta rápida: Usted empleará mucho tiempo interactuando con su
236 programa de control de revisiones.
238 Las herramientas distribuidas son indiferentes a los caprichos de su
239 infraestructura de servidores, de nuevo, debido a la replicación de
240 metadatos en tantos lugares. Si usa un sistema centralizado y su
241 servidor explota, ojalá los medios físicos de su copia de seguridad
242 sean confiables, y que su última copia sea reciente y además
243 funcione. Con una herramienta distribuida tiene tantas copias de
244 seguridad disponibles como computadores de contribuidores.
246 La confiabilidad de su red afectará las herramientas distribuidas de
247 una forma mucho menor que las herramientas centralizadas No puede
248 siquiera usar una herramienta centralizada sin conexión de red,
249 excepto con algunas órdenes muy limitadas. Con herramientas
250 distribuidas, si sus conexión cae mientras usted está trabajando,
251 podría nisiquiera darse cuenta. Lo único que que no podrá hacer es
252 comunicarse con repositorios en otros computadores, algo que es
253 relativamente raro comparado con las operaciones locales. Si tiene
254 colaboradores remotos en su equipo, puede ser significante.
256 \subsection{Ventajas para proyectos de código abierto}
258 Si descubre un proyecto de código abierto y decide que desea comenzar
259 a trabajar en él, y ese proyecto usa una herramienta de control
260 distribuido de revisiones, usted es un par con la gente que se
261 considera el ``alma'' del proyecto. Si ellos publican los
262 repositorios, se puede copiar inmediatamente la historia del proyecto,
263 hacer cambios y guardar su trabajo, usando las mismas herramientas de
264 la misma forma que ellos. En contraste, con una herramienta
265 centralizada, debe usar el programa en un modo ``sólo lectura'' a
266 menos que alguien le otorgue permisos para consignar cambios en el
267 repositorio central. Hasta entonces, no podrá almacenar sus cambios y
268 sus modificaciones locales correrán el riesgo de dañarse cuando trate
269 de actualizar su vista del repositorio.
271 \subsubsection{Las bifurcaciones(forks) no son un problema}
273 Se ha mencionado que las herramientas de control distribuido de
274 versiones albergan un riesgo a los proyectos de código abierto, puesto
275 que se vuelve muy sencillo hacer una ``bifurcanción''\ndt{fork.} del
276 desarrollo del proyecto. Una bifurcación pasa cuando hay diferencias
277 de opinión o actitud entre grupos de desarrolladores que desenvoca en
278 la decisión de la imposibilidad de continuar trabajando juntos. Cada
279 parte toma una copia más o menos completa del código fuente del
280 proyecto y toma su propio rumbo.
282 En algunas ocasiones los líderes de las bifurcaciones reconcilian sus
283 diferencias. Con un sistema centralizado de control de revisiones, el
284 proceso \emph{técnico} de reconciliarse es doloroso, y se hace de
285 forma muy manual. Tiene que decidir qué historia de revisiones va a
286 ``win'', e injertar los cambios del otro equipo en el árbol de alguna
287 manera. Con esto usualmente se pierde algo o todo del historial de la
288 revisión de alguna de las partes.
290 Lo que las herramientas distribuidas hacen con respecto a las
291 bifurcaciones, es que las bifurcaciones son la \emph{única} forma de
292 desarrollar un proyecto. Cada cambio que usted hace es potencialmente
293 un punto de bifurcación. La gran fortaleza de esta aproximación es que
294 las herramientas distribuidas de control de revisiones tiene que ser
295 bueno al \emph{fusionar} las bifurcaciones, porque las bifurcaciones
296 son absolutamente fundamentales: pasan todo el tiempo.
298 Si todas las porciones de trabajo que todos hacen todo el tiempo, se
299 enmarca en términos de bifurcaciones y fusiones, entonces a aquello a
300 lo que se refiere en el mundo del código abierto a una ``bifurcación''
301 se convierte \emph{puramente} en una cuestión social. Lo que hacen las
302 herramientas distribuidas es \emph{disminuir} la posibilidad de una
303 bifurcación porque:
304 \begin{itemize}
305 \item Eliminan la distinción social que las herramientas centralizadas
306 imponen: esto entre los miembros (personas con permiso de consignar)
307 y forasteros(los que no tienen el permiso).
308 \item Facilitan la reconciliación después de una bifurcación social,
309 porque todo lo que concierne al programa de control de revisiones es
310 una fusión.
311 \end{itemize}
313 Algunas personas se resisten a las herramientas distribuidas porque
314 desean mantener control completo sobre sus proyectos, y creen que las
315 herramientas centralizadas les da tal control. En todo caso, si este
316 es su parecer, y publica sus repositorios de CVS o Subversion, hay
317 muchas herramientas disponibles que pueden obtener la historia
318 completa(A pesar de lo lento) y recrearla en otro sitio que usted no
319 controla. Siendo así un control ilusorio, puesto que está impidiendo
320 la fluidez de colaboración en lugar de prevenir que alguien se sienta
321 impulsado a obtener una copia y hacer una bifurcación con su historia.
323 \subsection{Ventajas para proyectos comerciales}
325 Muchos proyectos comerciales tienen grupos de trabajo distribuidos
326 alrededor del globo. Quienes contribuyen y están lejos de un
327 repositorio central verán una ejecución más lenta de las órdenes y tal
328 vez menos confiabilidad. Los sistemas de control de revisión
329 comerciales intentan amortiguar estos problemas con adiciones de
330 replicación remota que usualmente son muy costosos y complicados de
331 administradr. Un sistema distribuido no padece estos problemas. Mejor
332 aún, puede colocar varios servidores autorizados, por ejemplo, uno por
333 sitio, de tal forma que no haya comunicación redundante entre
334 repositorios sobre enlaces de conexión costosos.
336 Los sistemas de control de revisiones distribuidos tienden a ser poco
337 escalables. No es inusual quw costosos sistemas centralizados caigan
338 ante la carga combinada de unas cuantas docenas de usuarios
339 concurrentes. De nuevo, las respuestas típicas de replibcación tienden
340 a ser costosas y complejas de instalar y administrar. Dado que la
341 carga en un servidor central---si es que tiene uno---es muchas veces
342 menor con una herramienta distribuida(debido a que los datos están
343 replicados en todas partes), un sólo servidor económico puede tratar
344 las necesidades de equipos mucho más grandes, y la replicación para
345 balancear la carga se vuelve cosa de scripts.
347 Si tiene un empleado en el campo, se beneficiará grandemente de un
348 sistema distribuido de control de versiones al resolver problemas en
349 el sitio del cliente. La herramienta le permitirá generar
350 construcciones a la medida, probar diferentes arreglos de forma
351 independiente y buscar de forma eficiente las fuentes de fallos en la
352 historia y regresiones en los ambientes de los clientes, todo, sin
353 necesidad de conectarse al servidor de su compañía.
355 \section{¿Por qué elegir Mercurial?}
357 Mercurial cuenta con un conjunto único de propiedades que lo hacen
358 particularmente una buena elección como un sistema de control de
359 revisiones, puesto que:
360 \begin{itemize}
361 \item Es fácil de aprender y usar.
362 \item Es liviano.
363 \item Escala de forma excelente.
364 \item Es fácil de acondicionar.
365 \end{itemize}
367 Si los sistemas de control de revisiones le son familiares, debería
368 estar listo para usar Mercurial en menos de cinco minutos. Si no, va a
369 tomar unos pocos minutos más. Las órdenes de Mercurial y su conjunto
370 de características son uniformes y consistentes generalmente, y basta
371 con que siga unas pocas reglas generales en lugar de un montón de
372 excepciones.
374 En un proyecto pequeño, puede comenzar a trabajar con Mercurial poco a
375 poco. Creando nuevos cambios y ramas, transfiriendo cambios(localmente
376 o por la red); y las operaciones relacionadas con el estado y la
377 historia son rápidas. Mercurial buscar ser ligero y no incomodar en su
378 camino combinando poca sobrecarga cognitiva con operaciones
379 asombrosamente rápidas.
381 La utilidad de Mercurial no se limita a proyectos pequeños: está
382 siendo usado por proyectos con centenas de miles de contribuyentes,
383 cada uno conteniendo decenas de miles de ficheros y centenas de
384 megabytes de código fuente
386 Si la funcionalidad básica de Mercurial no es suficiente para usted,
387 es muy fácil extenderlo. Mercurial se comporta muy bien con tareas de
388 scripting y su limpieza interna junto con su implementación en Python
389 permiten añadir características fácilmente en forma de extensiones.
390 Hay un buen número de extensiones útiles y populares en este momento,
391 desde ayudar a identificar fallos hasta el mejoramiento de su
392 desempeño.
394 \section{Comparación de Mercurial con otras herramientas}
396 Antes de leer, por favor tenga en cuenta que esta sección
397 necesariamente refleja mis propias experiencias, intereses y(tengo que
398 decirlo) mis preferencias. He usado cada una de las herramientas de
399 control de versiones listadas a continuación, y en muchos casos por
400 varios años.
403 \subsection{Subversion}
405 Subversion es una herramienta de control de revisiones muy popular,
406 desarrollada para reemplazar a CVS. Su arquitectura es centralizada
407 en cliente/servidor.
409 Subversion y Mercurial tienen órdenes con nombres similares para hacer
410 las mismas operaciones, por lo que si le son familiares en una, será
411 sencillo aprender a usar la otra. Ambas herramientas son portables en
412 todos los sistemas operativos populares.
414 Antes de la versión 1.5, Subversion no tenía soporte para fusiones. En
415 el momento de la escritura, sus capcidades para llevar cuenta de las
416 funciones son nuevas,
417 \href{http://svnbook.red-bean.com/nightly/en/svn.branchmerge.advanced.html#svn.branchmerge.advanced.finalword}{complicadas
418 y poco estables\ndt{buggy}}.
420 Mercurial tiene una ventaja considerable en el desempeño sobre
421 Subversion en cualquier operación de control de revisiones que yo haya
422 medido. He medido sus ventajas con factores desde dos hasta seis veces
423 comparando con almacenamiento de ficheros \emph{ra\_local}
424 Subversion~1.4.3, el cual es el método de acceso más rápido. En los
425 escenarios más sencillos incluyendo almacenamiento con la red de por
426 medio, Subversion se encuentra en desventaja aún mayor. Dado que casi
427 todas las órdenes de Subversion deben tratar con el servidor y
428 Subversion no tiene utilidades de replicación sencillas, la capacidad
429 del servidor y el ancho de banda se convierten en cuellos de botella
430 para proyectos modestamente grandes.
432 Adicionalmente, Subversion tiene un sobrecosto en almacentamiento
433 considerable para evitar transacciones por red en algunas operaciones,
434 tales como encontrar ficheros modificados(\texttt{status}) y desplegar
435 información frente a la revisión actual(\texttt{diff}). Como
436 resultado, la copia de trabajo de Subversion termina siendo del mismo
437 tamaño o más grande que un repositorio de Mercurial y el directorio de
438 trabajo, a pesar de que el repositorio de Mercurial contiene la
439 historia completa del proyecto.
441 Subversion tiene soporte amplio de otras herramientas. Mercurial por
442 ahora está bastante atrás en este aspecto. Esta diferencia está
443 disminuyendo, y algunas de las herramientas GUI\ndt{Interfaz de
444 Usuario Gráfica}, eclipsan sus equivalentes de Subversion. Al igual
445 que Mercurial, Subversion tiene un excelente manual de usuario.
447 Dado que Subversion no almacena la historia de revisiones en el
448 cliente, es muy bueno para administrar proyectos que tienen muchos
449 ficheros binarios grandes y opacos. Si consigna cincuenta revisiones
450 de un fichero de 10MB que no es comprimible, el esapacio en el cliente
451 de Subversion se mantendrá constante mientras que el espacio usado por
452 cualquier Sistema Distribuido de Control de Revisiones crecerá
453 rápidamente en proporción con el número de revisiones, debido a que
454 las diferencias entre cada revisión es grande.
456 Adicionalmente, generalmente es difícil o más bien, imposible mezclar
457 diferentes versiones de un fichero binario. La habilidad de Subversion
458 para permitirle al usuario poner una cerradura a un fichero, de modo
459 que tenga un permiso exclusivo para consignar cambios, puede ser una
460 ventaja significativa en un proyecto donde los ficheros binarios sean
461 usados ampliamente.
463 Mercurial puede importar la historia de revisiones de un repositorio
464 de Subversion. También puede exportar historia de revisiones a un
465 repositorio de Subversion. De esta forma es sencillo ``dar un
466 vistazo'' y usar Mercurial y Subversion en paralelo antes de decidirse
467 a dar el paso. La conversión de la historia es incremental, de modo
468 que puede aplicar una conversión inicial, y después conversiones
469 pequeñas y adicionales posteriormente para traer nuevos cambios.
471 \subsection{Git}
473 Git es una herramienta distribuida de control de revisiones
474 desarrollada para administrar el arbol del Kernel de Linux. Al igual
475 que Mercurial los principios de su diseño fueron influenciados por
476 Monotone.
478 Git tiene un conjunto de órdenes muy grande en la versión~1.5.0
479 ofrece~139 órdenes individuales. Tiene cierta reputación de ser
480 difícil de aprender. Comparado con Git, Mercurial tiene un fuerte
481 enfoque hacia la facilidad.
483 En términos de rendimiento, Git es extremadamente rápido. En muchos
484 casos, es más rápido que Mercurial, por lo menos en Linux, mientras
485 que Mercurial se comporta mejor en otras operaciones. De todas
486 maneras en Windows, el desempeño y el nivel general de soporte que
487 ofrece Git, al momento de la escritura, está lejos detrás de
488 Mercurial.
490 Mientras que el repositorio de Mercurial no requiere mantenimiento, el
491 repositorio de Git requiere frecuentes ``repacks'' a sus metadatos.
492 Sin estos, el desempeño se degrada y el espacio crece rápidamente. Un
493 servidor que contenga repositorios de Git que no sean reempacados
494 rigurosa y frecuentemente requerirá trabajo-intenso de disco durante
495 las copias de seguridad, y ha habido situaciones en copias de
496 seguridad diaria que toman más de 24 horas como resultado. Un
497 repositorio recién reempacado de Git es un poco más pequeño que un
498 repositorio de Mercurial, pero un repositorio sin reempacar es varios
499 órdenes de magnitud más grande.
501 El corazón de Git está escrito en C. Muchas órdenes de Git están
502 implementadas como scripts de shell o Perl y la calidad de esos
503 scripts varía ampliamente. He encontrado muchas situaciones en las
504 cuales los scripts no tuvieron en cuenta la presencia de errores que
505 podrían haber sido fatales.
507 Mercurial puede importar el historial de revisiones de un repositorio
508 de Git.
510 \subsection{CVS}
512 CVS es probablemente la herramienta de control de revisiones más
513 ampliamente usada en el planeta. Debido a su edad y su poca pulcritud
514 nterna, ha sido ligeramente mantenido en muchos años.
516 Tiene una arquitectura centralizada cliente/servidor. No agrupa
517 cambios relacionadso en consignaciones atómicas, pemitiendo que con
518 facilidad la gente ``rompa la construcción'': una persona puede
519 consignar exitósamente parte del cambio y estar bloqueada por la
520 necesidad de una mezcla, forzando a otras personas a ver solamente una
521 porción del trabajo que estaban buscando hacer. Esto afecta también
522 la forma como usted trabaja con la historia del proyecto. Si quiere
523 ver todas las modificaciones que alguien hizo como parte de una tarea,
524 necesitará inspeccionar manualmente las descripciones y las marcas de
525 tiempo de cambio de cada fichero involucrado(esto, si usted saber
526 cuáles eran tales ficheros).
528 CVS tiene una noción confusa de etiquetas y ramas que yo no trataría
529 incluso de describir. No soporta renombramiento de ficheros o
530 directorios de buena forma, facilitando el corromper un
531 repositorio. Casi no tiene chequeo de consistencia interna, por lo
532 tanto es casi imposible identificar por que o cómo se corrompió un
533 repositorio. Yo no recomendaría un repositorio de CVS para proyecto
534 alguno, ni existente ni nuevo.
536 Mercurial puede importar la historia de revisiones de CVS. De todas
537 maneras hay ciertos trucos para aplicar; los cuales también son
538 necesarios para cualquier herramienta importadora de historial de
539 CVS. Debido a la falta de atomicidad de cambios y el no versionamiento
540 de la jerarquía del sistema de archivos, es imposible reconstruir la
541 completamente la historia de CVS acertadamente; hay cierto trabajo de
542 conjetura involucrado y los renombramientos tampoco se
543 mostrarán. Debido a que gran parte de la administración avanzada de
544 CVS tiene que hacerse manualmente y por lo tanto es proclive al error,
545 es común que los importadores de CVS encuentren muchos problemas con
546 repositorios corruptos( marcas de tiempo totalmente desubicadas y
547 archivos que han permanecido con candados por más de una década son
548 dos de los problemas más interesantes de los que puedo retomar de mi
549 experiencia personal).
551 Mercurial puede importar la historia de revisiones de un repositorio
552 CVS.
554 \subsection{Herramientas comerciales}
556 Perforce tiene una arquitectura centralizada cliente/servidor sin
557 almacenamiento de dato alguno en el lado del cliente. A diferencia de
558 las herramientas modernas de control de revisiones, Perforce requiere
559 que un usuario ejecute una orden para informar al servidor acerca de
560 todo fichero que se vaya a editar.
562 El rendimiento de Perforce es muy bueno para equipos pequeños, pero se
563 degrada rápidamente cuando el número de usuarios va más allá de pocas
564 docenas. Instalaciones modestamente grandes de Perforce requiere la
565 organización de proxies para soportar la carga que sus usuarios generan.
567 \subsection{Elegir una herramienta de control de revisiones}
569 Con la excepción de CVS, toda las herramientas que se han listado
570 anteriormente tienen fortalezas que los hacen valiosos de acuerdo al
571 tipo de trabajo. No hay una única herramienta de control de revisiones
572 que sea la mejor en todas las situaciones.
574 Por ejemplo, Subversion es una buena elección para trabajar con
575 edición frecuente de ficheros binarios, debido a su naturaleza
576 centralizada y soporte para poner candados a ficheros.
578 Personalmente encuentro las propiedades de simplicidad, desempeño, y
579 buen soporte de fusiones de Mercurial una combinación llamativa que ha
580 dado buenos frutos por varios años.
583 \section{Migrar de otra herramienta hacia Mercurial}
585 Mercurial viene con una extensión llamada \hgext{convert}, que puede
586 importar historiales de revisiones de forma incremental desde varias
587 herramientas de control de revisiones. Por ``incremental'', quiero
588 decir que puede migrar toda la historia de un proyecto en una primera
589 instancia y después volver a ejecutar la migración posteriormente para
590 obtener los nuevos cambios que han sucedido después de la migración
591 inicial.
593 A continuación presentamos las herramientas de revisiones que la
594 orden\hgext{convert} soporta:
595 \begin{itemize}
596 \item Subversion
597 \item CVS
598 \item Git
599 \item Darcs
600 \end{itemize}
602 Adicionalmente, \hgext{convert} puede exportar cambios de Mercurial
603 hacia Subversion. Lo que hace posible probar Subversion y Mercurial
604 en paralelo antes de lanzarse a un migración total, sin arriesgarse a
605 perder trabajo alguno.
607 La orden \hgxcmd{conver}{convert} es sencilla de usar. Basta con
608 apuntarla hacia la ruta o el URL del repositorio fuente, opcionalmente
609 darle el nombre del nombre del repositorio destino y comenzará a hacer
610 su trabajo. Después de la conversión inicial, basta con invocar de
611 nuevo la orden para importar nuevos cambios.
614 %%% Local Variables:
615 %%% mode: latex
616 %%% TeX-master: "00book"
617 %%% End: