2009-04-09 13 views
60

No configuré el nombre de usuario en mi computadora de desarrollo e hice algunos commits. ¿Puedo cambiar retroactivamente el nombre de usuario para que quede claro quién cometió estos conjuntos de cambios?¿Puedo cambiar el nombre de usuario en un conjunto de cambios mercurial?

+0

Consulte el siguiente documento. Hay algunas desventajas en la reescritura del historial que se tratan en el documento, por lo que normalmente no se respetan. Sin embargo, parece ser posible. - [Editar historia] (http://www.selenic.com/mercurial/wiki/index.cgi/EditingHistory) –

Respuesta

75

Si no ha publicado su repositorio, entonces esto no debería ser demasiado difícil. Debe utilizar el Convert extension en Mercurial, que le permitirá "filtrar" su repositorio existente para crear uno nuevo. el parámetro --authors le permite editar el autor para cada confirmación a medida que se filtra.

Si tiene publicó su repositorio, tenga en cuenta el impacto en sus usuarios, la wiki mercurial tiene algunos reasons not to edit history.

habilitar la extensión mediante la adición de estas líneas a su .hgrc:

[extensions] 
hgext.convert= 

escribir un archivo para asignar el nombre antiguo al nuevo nombre (authors.convert.list):

[email protected][email protected] 

Ejecute la conversión:

hg convert --authors authors.convert.list SOURCE DEST 

Acabo de comprobarlo, me funciona :).

+0

Muy buena y completa respuesta. –

+0

@Andrew Aylett: ¿cómo lo revisaste? "$ hg clone myWrongRep name", realizó los cambios y luego "$ hg convert --authors theFile myWrongLocalRep". Ahora genera el archivo ".-Hg" y el sitio dice que debe haber algo con "estado de hg" pero no puedo encontrar nada (aunque lo hay. Tuve el autor incorrecto con el nombre 'hh' así que creé una línea 'hh = hhh 'al archivo, pero después de presionar, ahora cambiar y después de "$ hg update" y "$ hg push", sin cambios. ¿Qué me falta? – hhh

+0

Puede verificar los autores/verificar si los comandos funcionan con este comando '$ hg log --template '{author} \ n' | less', aún no lo tengo funcionando - sin entender el authormap - cosa. – hhh

11

He intentado un par de métodos diferentes (incluido el Convert Extension, que encontré creó un repositorio no relacionado). Las instrucciones de wiki de Mercurial para editing history using MQ fueron las que encontré más útiles. (Por supuesto, las advertencias habituales sobre la edición de cualquier públicamente conocida historia es una mala idea, pero local-changesets que solo usted está bien para editar).

Resumiré los pasos cruciales aquí y aclararé los mecanismos para cambiar al autor. Suponiendo que la primera confirmación errónea del autor está en la revisión BAD (y no ha publicado sus cambios en ningún lugar por supuesto), debería poder hacer lo siguiente (supongo que está en la raíz del repositorio):

Activar MQ añadiendo esto a $ HOME/.hg/hgrc

[extensions] 
hgext.mq= 

Convertir los conjuntos de cambios recientes en parches:

$ hg qimport -r BAD:tip 

(Ellos se pueden encontrar ahora en .hg/patches)

"anular la aplicación" (todos los asumen que los parches han sido aplicados, y les inversa), para obtener su repositorio en el estado de la revisión antes de BAD:

$ hg qpop -a 

Si nos fijamos en sus parches, que' ll ver que el autor se codifica en una especie de línea de comentario en todos los parches:

$ grep User .hg/patches/* 
.hg/patches/102.diff:# User Firstname Lastname <[email protected]> 

Ahora usa tu búsqueda favorito/reemplazar herramienta para fijar los parches (estoy usando Perl aquí).Supongamos que usted desea que el nombre de comprometerse a ser [email protected]:

$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff 

Ahora compruebe que ha cambiado correctamente el nombre del autor, y volver a aplicar los parches:

$ hg qpush -a 

luego convertir los parches aplicados al adecuado conjuntos de cambios:

$ hg qfinish -a 

Y listo. Su repositorio todavía aparece como relacionado, por lo que no recibirá ninguna queja sobre el empuje.

+0

Tengo "abortar: no puedo importar la revisión de combinación [Número de revisión] –

+1

Trabajé para mí. Sin embargo, tuve que cambiar el estado de mis confirmaciones de" publicado "a" borrador "primero. – user2428118

+0

Se necesitaba un'/'final antes del cierre citar, de lo contrario el comando 'perl' produjo un error' Reemplazo de sustitución no terminado en -e línea 1. De lo contrario perfecto, gracias! – ederag

6

He usado la extensión histedit que me permitió cambiar el autor sin hacer nuevos repos como "convertir" o recurrir a "mq".

primer lugar, en el archivo de configuración de Mercurial, asegúrese de que su nombre de usuario está configurado correctamente y habilitar la extensión histedit:

[ui] 
username = Your Name <[email protected]> 

[extensions] 
histedit = 

Entonces, si desea cambiar la revisión 40, utilice:

hg histedit -r 40 

En el archivo que aparece, en la línea correspondiente a la revisión 40, cambie la palabra pick por edit. Guarde y cierre el archivo.

Ahora, hg commit. Tendrá que volver a ingresar su mensaje de compromiso y guardarlo.

Finalmente, hg histedit --continue.

La confirmación aparecerá con su nuevo username. Un efecto secundario es que la marca de tiempo de la confirmación también se actualiza.

7

Si usted tiene un conjunto de cambios saliente sola, no es una forma muy simple de hacer esto:

$ hg ci --amend --user "My Name <[email protected]>" -X "**" 

La opción -X "**" puede omitirse si usted no tiene cualquier cambio local.

+0

Lo hizo trabajo! (Dios sabe lo que estaba haciendo :) –

Cuestiones relacionadas