2011-11-17 10 views
8

Tengo algunas cometer mensajes antiguos en un repositorio de Mercurial que debe ser cambiado (para ajustar algunas nuevas herramientas). Ya entiendo que este hackeo debe hacerse en el repositorio principal y todos los repositorios locales deberían volver a clonarse, ya que las sumas de comprobación de todos los conjuntos de cambios posteriores también cambiarán.Cómo editar el mensaje de compromiso Mercurial después de la bifurcación?

He intentado siguiendo las recetas en "How to edit incorrect commit messages in Mercurial?", pero con la extensión MQ me quedé atrapado en el mensaje de error

X:\project>hg qimport -r 2:tip 
abort: revision 2 is the root of more than one branch 

y con Histedit forma bastante similar

X:\project>hg histedit 2 
abort: cannot edit history that would orphan nodes 

El problema parece estar que ha habido ramas creadas después del conjunto de cambios.

puedo ver la forma en que se convertiría en un desastre si me gustaría cambiar el contenido del parche, pero tal vez hay una solución que me he perdido para editar el mensaje de confirmación?

+0

¿Está * realmente * seguro de que necesita hacer esto? Tengo bastante curiosidad por saber qué tipo de cambio de herramientas te obliga a emprender esto. –

+1

yo sepa, no se puede utilizar MQ o HistEdit para editar un mensaje de confirmación después de ramificación y no estoy al tanto de una otra herramienta capaz de hacer [email protected] si lees detenidamente la pregunta, verás que el enlace que proporcionaste no sirve de nada, el OP ya probó la solución propuesta;) – krtek

+0

@krtek Lo leo detenidamente. particularmente mensaje de error. entonces, si el repositorio ya fue clonado entre usuarios, es un problema para todos los usuarios. –

Respuesta

4

me gustaría utilizar una versión hackeada del convert extension para hacer esto. La extensión puede hacer hg → hg conversiones que le permite alterar los nombres de autor y de rama. Aún no se admite el cambio de mensajes de compromiso, pero puede hackearlo.

En concreto, se debe cambiar el método de getcommit:

def getcommit(self, rev): 
    ctx = self.changectx(rev) 
    parents = [p.hex() for p in self.parents(ctx)] 
    if self.saverev: 
     crev = rev 
    else: 
     crev = None 
    return commit(author=ctx.user(), date=util.datestr(ctx.date()), 
        desc=ctx.description(), rev=crev, parents=parents, 
        branch=ctx.branch(), extra=ctx.extra(), 
        sortkey=ctx.rev()) 

el cual se encarga de leer los antiguos confirmaciones. Cambiar el

desc=ctx.description() 

a

desc=adjust(ctx.description()) 

y luego implementar la función adjust en la parte superior del archivo:

def adjust(text): 
    return text.upper() 
2

Si se trata de ramas accidentales/duplicadas debido al uso de --amend y push --force, quítelas primero y pruebe 'histedit' de nuevo, luego limpie el repositorio central en bitbucket; tratar los siguientes elementos que funcionó para mí:

Inspeccionar el registro de repositorio y busque las ramas, se puede utilizar el GraphlogExtension el cual tendrá que habilitar primero:

# hg log -G | more 
... 
o changeset: 43:c2fcca731aa5 
| parent:  41:59669b9dfa4a 
| user:  Daniel Sokolowski (https://webdesign.danols.com) 
| date:  Tue Aug 27 20:14:38 2013 -0400 
| summary:  Progress snapshot: major content text and model instance .. 
... 
| o changeset: 42:c50724a6f1c6 
|/ user:  Daniel Sokolowski (https://webdesign.danols.com) 
| date:  Tue Aug 27 20:14:38 2013 -0400 
| summary:  Progress snapshot: major content text and model instance ... 
| 
o changeset: 41:59669b9dfa4a 
| user:  Daniel Sokolowski (https://webdesign.danols.com) 
... 

Active la MqExtension y la tira de todas las ramas.

# hg strip --no-backup 42:c50724a6f1c6 
# hg strip --no-backup 45:3420dja12jsa 
... 

Si el cambio necesario se comprometen a 'proyecto' (ver Phases) y vuelve a ejecutar 'histedit' y todo debería estar bien ahora.

# hg histedit 14:599dfa4a669b 
abort: cannot edit immutable changeset: b7cfa2f28bde 
# hg phase -f -d 14:599dfa4a669b 
# hg hsitedit 14:599dfa4a669ba 
Cuestiones relacionadas