Añadir un fichero a un repositorio Mercurial respetando su fecha de modificación

Mercurial es un excelente sistema de control de versiones comparable a Git, pero, en mi opinión, mejor por una gran variedad de razones. En febrero de 2013 di una charla en Python Madrid sobre este tema. Fue muy polémica. Ese es un tema para otro día :-).

Cuando se introduce una nueva versión de un fichero en el sistema de control de versiones, la fecha que se almacena es la fecha del commit. Esto no es problema porque, en general, hacemos el commit segundos o minutos después de hacer las modificaciones en el fichero.

El problema surge cuando queremos añadir un fichero antiguo a un sistema de control de versiones respetando la fecha de última modificación del fichero, no la hora del commit. Esto puede ser importante para respetar la historia del proyecto, preservar la integridad legal del mismo, etc.

Mercurial es versátil. A la hora de hacer un commit podemos especificar la fecha y hora que queremos reflejar mediante el parámetro -d o --date. Por ejemplo:

$ hg commit -d "$(date -u -r FICHERO +'%s') 0" -m "TEXTO"

El comando anterior hará un commit reflejando la fecha y hora del fichero especificado.