Siempre he usado git antes, pero quiero contribuir a Python, así que ahora tengo que aprender mercurial y lo encuentro muy frustrante.
Entonces, hice un par de parches pequeños y quería rastrearlos como commits en mi repositorio mercurial local. Aparentemente hay 4 formas de manejar la ramificación en mercurial . 1 y 4 me parecieron completamente ridículas, las ramas con nombre parecen ser pesadas y siento que no se supone que las use para las soluciones rápidas de 1 confirmación, así que usé marcadores.
Ahora, mi parche se rechaza y quiero eliminar una de mis ramas de marcadores de mi repositorio. OK, en git simplemente forzaría la eliminación de mi rama y me olvidaría de ella, así que elimino mi marcador y ahora tengo los siguientes problemas:
TortoiseHG y
hg log
todavía muestra que commit ydefault
branch tiene 2 cabezas. Y si entiendo correctamente, no puede eliminar confirmaciones en hg sin complementos adicionales.Mercurial no solo tiene hashes, sino también números de revisión. Como he agregado un par de mis propias confirmaciones, todas las confirmaciones obtenidas después de eso tienen números de revisión diferentes del repositorio central principal.
Lo hago
hg update
después de tirar para mover mimaster
marcador al último commit automáticamente, pero no pude encontrar una manera de hacerlo en TortoiseHG.
¿Qué estoy haciendo mal? ¿Es esto normal y esperado y debería ignorar estos problemas? ¿O cómo se supone que debo trabajar con mis sucursales?
En Mercurial, no creas ramas. Cada commit es efectivamente una rama, cualquier commit puede tener múltiples padres y múltiples hijos. Esas son las cuatro formas diferentes de organizar las mismas entidades.
Usted puede darles diferentes nombres, que no tiene que , pero es una idea buena. No hay nada pesado en las ramas con nombre: son solo algunos metadatos adicionales. Personalmente prefiero ramas con nombre a cualquier otra cosa en cualquier situación.
Cuál es exactamente la razón para usar ramas con nombre en lugar de volcar todo
default
.En realidad, no puede eliminar nada en Mercurial y no debería . Puede usar
hg strip
pero no está registrado; básicamente, solo corta una parte de su repositorio local. No puede presionar eso, y si saca de un repositorio que tiene la rama que despojó localmente, regresa.Los números no significan nada. Puedes ignorarlos si te confunden.
No he usado TortoiseHG pero
hg pull -u
haré ambas cosaspull
yupdate
.Está bien, muchos usuarios de Mercurial sienten lo mismo por Git (incluido yo).
fuente
Incluso cuando Mercurial y Git son similares, tienen diseños diferentes, quizás la diferencia de diseño más importante es que en Mercurial la modificación de la historia no es tan flexible como en git (porque es un poco desaconsejado).
Respuesta corta : no importa si tiene una pequeña cantidad de cambios, aún puede usar una rama. Si está pensando en eliminar esa rama, use un marcador para poder eliminarla más tarde y quitar los cambios después.
Primero, tratando de arrojar un poco de luz sobre algunas de las cosas que mencionas:
Se considera que 1 y 4 se ramifican porque cada vez que se compromete, efectivamente está creando una rama sin nombre (si hay otra confirmación al mismo tiempo en su repositorio fuente / bendecido), que técnicamente es una rama. En el método 4 está creando una nueva "cabeza", mientras que en el método 1 no lo está . Se supone que las cabezas se fusionan. Estoy de acuerdo en que el método 1 es un poco tonto, pero parece que a algunos les gusta ... para proyectos pequeños, supongo.
Con respecto al método 2, no es que las ramas sean pesadas, es que son permanentes . No puede eliminar una rama a menos que use algo como la extensión de la tira. Una vez más, la filosofía de diseño de Mercurial no se dirige hacia la modificación de la historia (pero ha mejorado en eso).
En cuanto a los números de revisión , son solo una referencia local y más legible para que usted use todos los comandos que tienen que ver con las revisiones. Si te gusta usar hashes, aún puedes hacerlo. Los números de revisión son solo un atajo y Mercurial no los tiene en cuenta para cualquier operación interna entre diferentes repositorios.
Ahora, para responder a sus otras preguntas:
hg heads
, si ve más de 2 cabezas en una sola rama con nombre, es preferible que estén fusionadas. Eso es probablemente donde está tu marcador .hg rollback
, pero supongo que este no es el caso.hg bookmark --delete yourbookmark
Además, en git puedes tener "sucursales locales privadas" porque tienes que empujarlas explícitamente y luego puedes eliminarlas. En Mercurial empuja todo lo que tiene , sin embargo, si desea evitar esto , puede usar la función Fases y marcar un conjunto de revisiones como secreto . Las revisiones secretas no serán empujadas.
Finalmente, no está haciendo nada malo , solo tenga en cuenta que son solo herramientas diferentes construidas con mentalidades ligeramente diferentes, que se reducen a: modificar el historial (git) o no modificar el historial (hg). En Mercurial es más difícil dispararte al pie modificando la historia (especialmente con Fases) y es por eso que a algunos les gusta más que git .
fuente
hg strip
. Supongo que uno podría argumentar lo mismo sobre las copias descentralizadas de los nombres de las ramas de Git, excepto la distinción de que las ramas con nombre tienen un espacio de nombre global y los nombres de las ramas de Git no. Y existen múltiples cabezas debido a las ramas de nombre. Es un error de diseño infeccioso para un VCS descentralizado.Creo que con mercurial es más fácil no preocuparse por las ramas. Solo encuentro en qué parte de la historia quiero editar y crear confirmaciones según sea necesario (también conocido como ramas anónimas). A veces, los marcadores pueden ser útiles si tengo que saltar entre cabezas en diferentes contextos, pero a menudo no me molesto con ellos. Las ramas con nombre están bien para las ramas de larga duración (ramas de corrección de errores, ramas de proyecto), pero para las correcciones de 1 o 2 confirmaciones, no son la herramienta adecuada para el trabajo.
El truco con las ramas anónimas es establecer su fase en "secreto" si no quiere empujarlas, es decir, si desea mantenerlas locales. Si usted no quiere empujar ellos, pero que no quiere tener más confirmaciones basados en ellos, que acaba de cometer un "--close-rama" en la parte superior de ellos lo que significa que ya no aparecen en la lista de 'cabezas' y mercurial dejará de quejarse de múltiples cabezas en esa rama.
fuente
Creo que simplemente podemos usar marcador en lugar de rama; De todos modos, vamos a seguir apoyando el producto, y fusionar dos sucursales a largo plazo sería un gran dolor de cabeza.
fuente