Preserving file timestamps with Git and Mercurial

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

プラットフォームについて: Cloud のみ - この記事は、 クラウド プラットフォームのアトラシアン製品にのみ適用されます。

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.

最終更新日 2017 年 7 月 13 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.