¿Cómo mantener los cambios no confirmados en un repositorio mercurial local, sin dejar de presionar / tirar?

StackOverflow https://stackoverflow.com/questions/6392832

  •  29-10-2019
  •  | 
  •  

Pregunta

Si estoy trabajando en algunos archivos que no quiero confirmar, simplemente los guardo. Luego tengo otros archivos que quiero enviar al servidor, sin embargo, si alguien más ha realizado cambios en el repositorio y los elimino, me pide que los fusione o vuelva a establecer la base de datos .. pero cualquiera de estas opciones me causará perder mis cambios locales que no he cometido .

¿Qué están haciendo otras personas para evitar esto? Me resulta difícil entender la documentación de la extensión de la estantería.

Nota: Estoy usando Mercurial Eclipse para enviar y extraer archivos del servidor.

¡Cualquier explicación de esto sería muy apreciada! ¡Gracias!


Ejemplo:

Estoy trabajando en mi sitio web en Mercurial Eclipse. Tengo una nueva carpeta y nuevos archivos que todavía no quiero enviar al servidor. También modifiqué algunos archivos existentes y no quiero que esos cambios estén activos todavía.

Entonces, algo en mi sitio web se rompe y necesito arreglarlo, no me dejará arreglarlo sin volver a basar o fusionarme con la sugerencia más reciente del repositorio y esto hará que pierda todos mis cambios no confirmados.

¿Qué debo hacer con mi nueva carpeta y los archivos que he editado si no quiero perderlos? Volver a clonar parece tedioso. Copiar los archivos a una nueva carpeta también parece tedioso. Estoy seguro de que Shelving o MQ harán lo que quiero, pero todavía no sé cómo hacerlo.

¿Fue útil?

Solución

Estoy seguro de que alguien te ayudará a encontrar una solución incorrecta, pero la mejor ruta es cambiar tus objetivos, simplemente comprometerte.El código que no se ha comprometido no se ha escrito.Si no puede soportar tener confirmaciones frecuentes en su historial, use Mercurial Queues con un repositorio de colas y confirme eso.Luego puede hacer estallar los conjuntos de cambios, presionar / extraer / fusionar, y luego presionarlos de nuevo, y todo su valioso trabajo se enviará a la cola de parches.

Otros consejos

Con referencia a su situación de ejemplo, esto es lo que haría (siguiendo la estrategia de Ry4an de solo comprometer las cosas en las que está trabajando actualmente, pero que no desea publicar ya):

Supongamos que empiezas a trabajar en un repositorio como este:

$ hg status -A
C f1
C f2
$ hg glog
@  changeset:   1:7f3c6c86a92f
|  tag:         tip
|  summary:     add f2
|
o  changeset:   0:03ca1e6d5b86
   summary:     initial

Es decir, hay 2 archivos y 2 confirmaciones / conjuntos de cambios. Haces un poco de trabajo, digamos que agregas una nueva característica, y luego tu copia de trabajo podría verse así:

$ hg status
M f2
? f3
? f4

Hay 2 archivos nuevos y 1 modificado. Ahora debe corregir un error para el que también necesita nuevos cambios en un repositorio remoto. Haga una instantánea de su trabajo actual comprometiéndolo y extrayendo los cambios remotos (en qué orden lo haga eso no importa, una extracción por defecto no toca el estado de su copia de trabajo):

$ hg commit -A -m "snapshot feature work"
$ hg pull

Esto puede resultar en un historial como este:

o  changeset:   3:2284ba62de07            <-- just pulled in
|  tag:         tip
|  parent:      1:7f3c6c86a92f
|  summary:     edit f1
|
| @  changeset:   2:4a19d371a04f          <-- your interrupted work
|/   summary:     snapshot feature work
|
o  changeset:   1:7f3c6c86a92f
|  summary:     add f2
|
o  changeset:   0:03ca1e6d5b86
   summary:     initial

Ahora puede actualizar / pagar la revisión 3 y comenzar a corregir errores:

$ hg update 3
.. fix the bug ..
$ hg commit -m "fix a bug"
$ hg glog --limit 3
@  changeset:   4:5d3d947fb4af
|  tag:         tip
|  summary:     fix a bug
|
o  changeset:   3:2284ba62de07
|  parent:      1:7f3c6c86a92f
|  summary:     edit f1
|
| o  changeset:   2:4a19d371a04f
|/   summary:     snapshot feature work
:

Se ve bien, vamos a impulsar su solución, es decir, hagámoslo en vivo, sin publicar su trabajo intermedio:

$ hg push -r 4

Esto impulsa todos los cambios que conducen a la revisión 4, su corrección de errores, pero no a otras ramas en su repositorio local. También puede usar -r ., que se refiere a la revisión principal de su copia de trabajo, es decir, la revisión que acaba de confirmar.

Por último, puede volver a su trabajo de funciones y continuar con su trabajo:

$ hg update 2
.. work, commit, work, commit ..
.. finally merge with the other branch, e.g. revision 4

Estos pasos están en la línea de comandos, pero creo que no es difícil adaptar el concepto general a los clics correspondientes en el complemento Eclipse Mercurial.

Algunas notas adicionales:

  • Es posible que desee marcar su confirmación de instantánea, por lo que no es necesario trabajar con números o ID de revisión.
  • Si desea publicar su trabajo de funciones en una única confirmación más adelante, use la extensión collapse una vez que haya terminado.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top