¿Cómo mantener los cambios no confirmados en un repositorio mercurial local, sin dejar de presionar / tirar?
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.
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.