mercurial code-review mercurial-phases

mercurial - Después de pasar a un repositorio de revisión, "abortar: no se puede reajustar un conjunto de cambios inmutable" en rebase



code-review mercurial-phases (3)

En el archivo .hg / hgrc del repositorio de revisión, agregue estas líneas:

[phases] publish = False

El problema se debe a una nueva característica en mercurial 2.1 llamadas phases . Es genial. Here hay una buena introducción a su uso.

Para hacer que los conjuntos de cambios en cuestión sean mutables ahora, use hg phase -f -d REV para forzar que REV sea mutable nuevamente. Una vez que se haya cambiado el archivo hgrc, ya no tendrá que volver a hacerlo.

Como nota al margen, hg push -f es cojo. Haga una hg review alias hg review que empuja con -f a ese repositorio.

Tenemos un repositorio de revisión de código donde las personas hg push -f todo tipo de cosas. Una vez que se completan las revisiones, extraemos del repositorio central del proyecto, la rebase y el empuje. Recientemente actualicé a Mercurial 2.1 y recibí este mensaje:

abort: can''t rebase immutable changeset 43ab8134e7af (see hg help phases for details)

cuando intento hg pull --rebase desde el repositorio central. ¿Cómo lo arreglo?


Me he encontrado con este comportamiento con rebase colapsado. La eliminación de vuelta al draft no me había ayudado. Así que acabo de detener ( hg pull -u ) para sincronizar con el repositorio remoto, luego injerté el compromiso de problema ( hg graft <problem_commit> ) y luego hg graft <problem_commit> este nuevo compromiso.


No creo que deshabilitar el soporte de fase en el servidor sea la solución correcta, pero su problema parece extraño.

Pull --rebase debería cambiar sus cambios locales, además de los cambios remotos, que deberían permitirse, incluso si el cliente admite las fases, siempre que nadie más haya visto estos cambios , por ejemplo. no han sido expulsados ​​en ningún lado.

¿Es posible que ya hayas enviado tus propios cambios a otra parte (lo que los puso en la fase pública) y después de eso intentaste retirarte del repositorio de pruebas? Porque entonces, este es el comportamiento correcto que estás viendo.

La mayoría de las veces es una mala idea meterse con las fases manualmente (con hg phase -f ), ya que puede conducir fácilmente a una reescritura del historial, lo que puede llevar a conjuntos de cambios duplicados, o varios errores cuando otras personas intentan tirar / empujar . Si un conjunto de cambios se marca como público (como en su caso), probablemente sucedió por una buena razón.