2010-08-21 12 views
32

decidí cambiar el nombre de algunos directorios en mi casa/manía paquete de Python (doc a docs, test a tests, util a utils), ya que, ahora que he pensé más al respecto, creo que los nuevos nombres son más apropiados. Mi pensamiento general ahora es que si los contenedores tienen nombres de sus contenidos, sus nombres deberían ser nombres en plural.Cómo cambiar el nombre de un directorio en Mercurial y seguir para realizar un seguimiento de todos los archivos cambia

Ahora que estoy listo para mi próxima hg commit Me pregunto cómo decirle a Mercurial sobre estos cambios de nombre de directorio. Soy nuevo en el software RCS en general y solo he usado Mercurial por un par de meses. Cuando ejecuto hg status, muestra todos los archivos en estos directorios siendo eliminados y agregados, así que me temo que si hago un hg addremove perderé todo el historial de cambios para los archivos en estos directorios, o al menos el cambio la historia se fragmentará y no se podrá rastrear. Me encontré con el comando hg rename, pero los documentos solo discuten su uso para archivos individuales, no directorios.

Después de leer más en la "Guía definitiva" de Bryan O'Sullivan, parece que tal vez rename puede referirse a los directorios.

Así que aquí es lo que he decidido intentar:

hg rename --after doc docs 
hg rename --after test tests 
hg rename --after util utils 
hg status 
hg addremove 

Puede alguien decirme si este es el método aceptado y preferido para cambiar el nombre de los directorios en Mercurial, y si no, ¿cómo debo hacerlo.

Respuesta

38

Como ya ha cambiado el nombre de los directorios, esto está perfectamente bien. (Le habría ahorrado un paso manual si hubiera dejado que Mercurial le cambiara el nombre: hg rename doc docs, etc. en lugar de hacerlo usted mismo y luego se lo haría saber a Mercurial).

Si no tiene otros archivos para registrar, el hg addremove es superfluo. Mira en la salida del hg stat y sólo se debe ver las líneas que comienzan con 'R' (por doc/*, test/* y util/*) y 'A' (para docs/*, etc.)

Por último, no se olvide de confirmar los cambios .

EDIT: Olvidé decir ... use hg log --follow para rastrear los cambios en el cambio de nombre.

+0

Gracias Niall. Eso funcionó perfectamente. –

15

Mercurial no tiene concepto de directorios; trata todo (archivos y directorios) como archivos. Además, por lo general, nunca cambio el nombre de los archivos o directorios de forma manual; Sólo tiene que utilizar

hg cambiar el nombre del viejo nombre nuevo nombre

le sugiero que hacer eso también.

Mercurial ofrece una función de seguimiento de cambio de nombre, lo que significa que mercurial puede rastrear el historial completo de un archivo que ha sido renombrado. Si renombra manualmente esto, no es posible.

Sin embargo, como ya los ha renombrado manualmente, necesita usar el argumento --follow junto con hg log para rastrear los cambios de archivo a través del historial.

Personalmente, me gustaría ir con hg rename y debería ser el método preferido.

+0

Tomaré su consejo y dejaré cualquier cambio de nombre en el futuro. Gracias por la explicación y consejos. –

+0

Corrección: Mercurial no trata los directorios como archivos; los ignora No puedes rastrear un directorio. – undefined

9

Una razón para usar --después de cambiar el nombre con hg es si está usando una herramienta de refactorización que hace algo más que cambiar el nombre, p. también corrige las referencias.

+0

Este es un gran problema, si no está usando un complemento de hg para Visual Studio. –

Cuestiones relacionadas