Recientemente estuve discutiendo sobre dvcs con un compañero de trabajo, porque nuestra oficina está comenzando a considerar cambiar de TFS (somos una tienda de MS). En el proceso, me confundí mucho porque dijo que aunque usa Mercurial, no había oído hablar de un comando de "rama" o "pago", y estos términos no le eran familiares. Después de preguntarse cómo era posible que él no supiera sobre ellos y explicar cómo las ramas dvcs funcionan "en su lugar" en sus archivos locales, estaba bastante confundido.
Explicó que, de manera similar a cómo funciona TFS, cuando quiere crear una "rama" lo hace mediante la clonación, por lo que tiene una copia completa de su repositorio. Esto me pareció realmente extraño, pero el beneficio, que tengo que reconocer, es que puedes mirar o trabajar en dos ramas simultáneamente porque los archivos están separados.
Al buscar en este sitio para ver si esto se ha preguntado antes, vi un comentario de que muchos recursos en línea promueven esta metodología de "clonar para ramificar", para consternación del afiche. ¿Es esto realmente común en la comunidad dvcs? ¿Y cuáles son algunos de los pros y los contras de ir de esta manera? Nunca lo haría, ya que no necesito ver varias ramas a la vez, el cambio es rápido y no necesito que todos los clones llenen mi disco.
git
funciona. Conhg
este suele ser el primer flujo de trabajo enseñó y todavía es muy útil.Respuestas:
Además de la ventaja / desventaja general de poder ver ambas ramas, creo que hay una ventaja específica de Mercurial para hacerlo.
Si clona para crear una rama, puede eliminar el clon más adelante si no desea conservar sus cambios. Si decide fusionarlos, el hecho de que decidió separar sus cambios de esta manera no es visible para nadie más.
Por el contrario, si usa
hg branch
para crear una nueva rama con nombre, el nombre de la rama se registra en el historial cuando se compromete, es visible para todos los demás y debe ser bastante único para evitar posibles confusiones más adelante. Esto podría no ser apropiado si su rama es para desarrollar alguna característica experimental, o para un cambio que podría resultar pequeño.Si usa ramas con nombre para mantener versiones lanzadas de su software y también las usa para desarrollar características a corto plazo o correcciones de errores, es fácil confundirse porque no hay forma (además de las convenciones de nombres) de mantener estos dos tipos de ramas separadas.
http://mercurial.selenic.com/wiki/StandardBranching explica esto con más detalle. También vale la pena mencionar que desde Mercurial 1.8, es posible crear un marcador (
hg bookmark
), un nombre desechable para una sucursal de corta duración. Los marcadores se pueden empujar, tirar, mover y eliminar.fuente
git
, ya que me he acostumbrado a ellashg
. Además, tener que recordar explícitamentegit branch
cada vez que quiero crear una rama es molesto, en comparación conhg
la creación automática de ramas sin nombre.Cada vez que se compromete en un DVCS técnicamente está haciendo una bifurcación en la historia, cada vez que lo devuelve al bendito repositorio lo integra de nuevo, aquí viene la parte interesante:
¿Recuerda el botón "bifurcación" en Bitbucket / github ?, bifurcación puede considerarse como un sinónimo de ramificación, y lo que hace el botón "bifurcación" es solo un clon de ese repositorio en su cuenta.
La única ventaja de "clonar en rama" es poder trabajar simultáneamente en dos puntos de la historia, e irónicamente para su compañero de trabajo, es un flujo de trabajo común para trabajar en diferentes ramas al mismo tiempo (sin tener que ir y venir) )
Dígale a su compañero de trabajo que aprenda a ramificarse , es muy fácil, aquí tiene un tutorial:
"Clonar en rama" tiene sentido cuando trabaja en diferentes ramas al mismo tiempo , o cuando desea probar un experimento sin crear una rama permanente en el historial y aún así poder volver a integrarlo en una rama ya existente .
Personalmente no me gusta esta práctica y prefiero hacer sucursales y cerrarlas si es necesario. Aquí, así es como lo haces:
Espero que esto aclare sus dudas de ramificación DVCS, aquí las ramas ya no dan miedo.
fuente
Personalmente, no me preocuparía por el código que llena mi disco ... primero, es solo código, y segundo, no vas a mantener todos tus clones para siempre.
Esta metodología se promueve en muchos recursos en línea, especialmente para Hg. Nunca lo he visto usado en producción, en entornos de CI es mucho más común tener ramas de características de corta duración que clones de repositorio adicionales. No veo la ventaja de hacer esto, en todo caso hará que su historia sea más confusa, no menos, y tampoco le dará nada. Si desea ver su nuevo código junto con el código anterior, puede usar una herramienta de diferencia / fusión para ver las dos confirmaciones una al lado de la otra, con la ventaja adicional de que verá sus cambios resaltados.
fuente
hg
. Poder empujar y tirar entre múltipleshg
repositorios puede ser una herramienta de colaboración realmente poderosa. Solo poder extraer degit
repositorios no desnudos puede limitar sustancialmente sus opciones con este tipo de flujo de trabajo.