uplay - ¿Puedo cambiar el nombre de usuario en un conjunto de cambios mercurial?
quiero cambiar mi nombre de usuario de snapchat (4)
Si no ha publicado su repositorio, entonces esto no debería ser demasiado difícil. Necesita usar la extensión Convert para 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 ha publicado su repositorio, tenga en cuenta el impacto en sus usuarios, el wiki de mercurial tiene algunas razones para no editar el historial .
Habilite la extensión agregando estas líneas a su .hgrc:
[extensions]
hgext.convert=
Escriba un archivo para mapear el nombre anterior al nuevo nombre (authors.convert.list):
user@[email protected]
Ejecuta la conversión:
hg convert --authors authors.convert.list SOURCE DEST
Acabo de comprobarlo, me funciona :).
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?
He intentado un par de métodos diferentes (incluida la Extensión de conversión , que encontré creó un repositorio no relacionado). Las instrucciones de Mercurial wiki para editar el historial usando MQ fueron las que encontré más útiles. (Por supuesto, las advertencias habituales sobre la edición de cualquier historia pública son una mala idea, pero los cambios locales que solo usted tiene son correctos).
Resumiré los pasos cruciales aquí y aclararé la mecánica para cambiar al autor. Suponiendo que la primera confirmación errónea del autor es una revisión BAD
(y usted 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):
Habilite MQ agregando esto a $ HOME / .hg / hgrc
[extensions]
hgext.mq=
Convierte los conjuntos de cambios recientes en parches:
$ hg qimport -r BAD:tip
(Ahora se pueden encontrar en .hg/patches
)
"Desinscriba" todos los parches (suponiendo que se han aplicado, e inviértalos), para colocar su repositorio en el estado de la revisión antes de BAD
:
$ hg qpop -a
Si observa sus parches, verá que el autor está codificado 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 herramienta favorita de búsqueda / reemplazo para arreglar los parches (estoy usando Perl aquí). Supongamos que desea que el nombre del commit sea [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 vuelva a aplicar los parches:
$ hg qpush -a
A continuación, convierta los parches aplicados en los conjuntos de cambios adecuados:
$ hg qfinish -a
Y tu estas listo. Su repositorio todavía aparece como relacionado, por lo que no recibirá ninguna queja sobre el empuje.
Si tiene un solo conjunto de cambios saliente, hay una manera muy simple de hacerlo:
$ hg ci --amend --user "My Name <[email protected]>" -X "**"
La opción -X "**"
puede omitirse si no tiene ningún cambio local.
He usado la extensión histedit
que me permitió cambiar el autor sin hacer repositorios nuevos como "convertir" o recurrir a "mq".
Primero, en su archivo de configuración de Mercurial, asegúrese de que su nombre de usuario esté configurado correctamente y habilite la extensión histedit:
[ui]
username = Your Name <[email protected]>
[extensions]
histedit =
Luego, si quiere cambiar la revisión 40, use:
hg histedit -r 40
En el archivo que aparece, en la línea correspondiente a la revisión 40, cambie la pick
palabra para 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 tu nuevo username
. Un efecto secundario es que la marca de tiempo de la confirmación también se actualiza.