2

git-restoremtimeスクリプトを使用すると、コミット メッセージの日付に基づいて、git リポジトリからチェックアウトされたファイルの変更時刻を修正できます。

しかし、ディレクトリの mtime を直感的で決定論的で一貫性のあるものにするにはどうすればよいでしょうか?

各ディレクトリの mtime を、そのディレクトリまたはそのサブディレクトリ内のあらゆる種類のファイルに触れた最新のコミットの時刻に設定するのが最も理にかなっていると思います。このような再帰的な mtime の伝播は合理的に聞こえますか? gitで簡単にできるものですか?

4

2 に答える 2

3

したがって、ディレクトリの確定的な mtime をサポートするようにスクリプトを変更するのは非常に簡単です。

https://github.com/cnst/git-tools/commit/89d09da9f362651ce9a0ca66362913c09e6b57cb https://github.com/cnst/git-tools/commit/b20207dc8fd9b791b8371dab94e98aca0a8412f6

https://stackoverflow.com/a/13284558/1122270と統合される最短のスニペットは次のとおりです。

dirlist = dict()
...

        dir = file
        while dir:
            dir = os.path.dirname(dir)
            if dir in dirlist:
                if dirlist[dir] < mtime:
                    dirlist[dir] = mtime
            else:
                if os.path.isdir(dir):
                    dirlist[dir] = mtime
...

for file, mtime in dirlist.iteritems():
    try:
        os.utime(os.path.join(workdir, file), (mtime, mtime))
        touches += 1
    except Exception as e:
        logger.error("ERROR: %s\n", e)
        errors += 1
于 2013-01-30T07:46:31.157 に答える
1

gitで簡単にできるものですか?

これは、Git (またはその他の分散型VCS)とは何の関係もありません。Gitは単にタイムスタンプを記録しません。

したがって、ポリシーはコンテキストでは意味がありますが、ローカルリポジトリに適用されたスクリプトの結果にすぎず、そのクローンで複製される保証はありません。

于 2013-01-30T07:45:38.930 に答える