2011-03-10 13 views
36

how to do it, simplemente no puedo entender por qué hg mv no mueve el historial del archivo también de forma predeterminada.¿Por qué 'hg mv' (mercurial) no mueve el historial de un archivo de forma predeterminada?

Parece una tontería estar obligado a ejecutar hg log --follow antes de hg mv. Esto me recuerda los tiempos con cvs cuando necesitaba eliminar y agregar un archivo usando dos operaciones diferentes y perdiendo historial de la misma manera.

En mi humilde opinión, si solo estuviera usando builtin mv que estaría bien perder el historial, pero estoy usando hg mv, y, pensando en el repositorio en sí, no tiene sentido perder el historial by default. Debería haber hg mv --no-follow y no al revés.

Esto no es intuitivo. ¿Alguien aquí tiene una explicación sensata sobre este comportamiento? ¿Es esto un error de diseño, o hay una buena razón para ello? ¿Es posible hacer esto --follow de forma predeterminada cuando se usa hg mv?

+3

'hg log --follow' tiene ningún efecto sobre los resultados de' hg mv'. No hay ninguna razón u obligación para ejecutar 'log' antes de' mv', (En el futuro, el indicador '--follow' te ayudará a mirar los registros _después_ de que hayas cambiado el nombre de los archivos en tu repositorio con' hg mv'. Eso es todo es para.) –

Respuesta

34

Puede puede cambiar el comportamiento predeterminado de registro: en su ~/.hgrc (o en algún lugar/Mercurial.ini), añadir

[alias] 
log = log -f 

He leído la aparición del tronco es la razón de velocidad . Move no es realmente una operación de "primer nivel" en Mercurial. Es una copia + eliminar (esto en comparación con Bazar, donde el movimiento/cambio de nombre es una operación de "primer nivel" pero eso no tiene una copia con preservación del historial).

+0

@xanatos: ¿Es posible crear un gancho o algo que, antes de hacer hg mv, ejecute automáticamente hg log -f? –

+6

No no. El registro de hg -f solo muestra el registro. El mv SIEMPRE se guarda como cp + rm (lo mismo para cambiar el nombre si recuerdo correctamente). Solo está forzando que el registro funcione un poco más para seguir el historial de los archivos. – xanatos

+0

@xanatos, mv es solo un alias para cambiar el nombre. –

31

Usted no sabe cómo hacerlo. hg log --follow afecta cómo se muestra el registro, no cómo se realiza el movimiento real. Por defecto, se muestra el historial del nombre del archivo. --follow sigue a cambiar el nombre y las copias. Esto concuerda con la forma en que Mercurial se implementa internamente.

No hay ninguna razón para ejecutar hg log --follow antes de hg mv.

2

La respuesta de @xantos ahora está fechada. La forma correcta de actualizar el archivo hgrc es:

[alias] 
log = log -f 
Cuestiones relacionadas