Preserving file timestamps with Git and Mercurial

Still need help?

The Atlassian Community is here for you.

Ask the community

Platform Notice: Cloud Only - This article only applies to Atlassian products on the cloud platform.

Problem: Your build system fails because of file attribute changes (timestamps). Is there anyway to allow Git/Mercurial to preserve the original timestamp?

 

What you've stumbled across is one of the fundamental design principles of version control systems. Both Git and Mercurial track content. That is, they only track the file's contents (which is verified by using the SHA-1 of the file). The timestamp of a file is inherently a local attribute. Imagine you move a file from one location to /tmp, then you move it back. The file's contents remain unchanged but its timestamp will be whenever you moved it back.

So, asking to keep file attributes is just not possible with either Git nor Mercurial:

https://git.wiki.kernel.org/index.php/Git_FAQ#Why_isn.27t_Git_preserving_modification_time_on_files.3F

The communities of each version control system will undoubtedly tell you that your build system will need to be changed to accommodate for this. Build systems like bazel.io are fast and popular solutions, which may work better for you. Furthermore, changing the tools now would break existing build systems including the linux kernel itself. The topic comes up occassionally, as seen here:

https://selenic.com/pipermail/mercurial/2015-August/048617.html

where the project leader himself explains why that's a bad idea.

Last modified on Jul 13, 2017

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.