git
принципиально не сохраняет время изменения контролируемых файлов. В случае, если время изменения файла важно (например, для кэширования), mtimer
поможет их восстановить.
mtimer
позволяет сохранить mtime
для файлов в указанной директории и потом восстановить сохранённые значения.
При восстановлении надо не присвоить изменённым файлам старый mtime
. Для определения изменения файла сохраняется hash
его содержимого (сейчас это md5
).
Если хэш файла изменился между store
и apply
, то его mtime
не восстанавливается.
mtimer
написан на go
и работает быстро.
mtimer --store --filespath=/path/to/files --timespath=/path/to_mtimer_dat --ignore=node_modules,tmp,.git
--store
- режим сохраненияmtimes
в файл--filespath
- путь к директории, для файлов которой нужно сохранитьmtimes
--timespath
- путь к директории, куда сохранить файлmtimes.dat
--ignore
- список поддиректорий, для которых mtimes сохранять не нужно
mtimer --apply --filespath=/path/to/files --timespath=/path/to_mtimer_dat
--apply
- режим восстановленияmtimes
из файла--filespath
- путь к директории, для файлов которой нужно восстановитьmtimes
--timespath
- путь к директории, откуда взять файлmtimes.dat
mtimer --help
mtimer --version
Попробовал подобное решение на perl
- https://github.com/danny0838/git-store-meta - но оно хранит информацию о файлах в гите, требует наличия git-репозитория для сбора метаданных и работает на порядок медленнее.