Недавно я начал использовать Git. Одной из интересных особенностей, которые я обнаружил, было использование хешей для быстрого обнаружения изменений.Есть ли попытка разработать файловую систему с автоматической записью файлов?
С другой стороны, я вижу, что инструменты сборки (например, make, ant, javac и т. Д.) Пытаются обнаружить изменения в исходных файлах, проверяя метку времени файла.
Проблемы при таком подходе являются:
- Если вы работаете на более чем одной машине, вы должны убедиться, что все часы синхронизированы, в противном случае новый файл можно считать неизменным потому что часы других машин дали ему временную метку прошлого относительно строительной машины.
- В большом проекте вам нужно отсканировать метку времени всех файлов, чтобы обнаружить изменение.
Интересно, если кто-то уже приняли подход Git для того, чтобы справиться с этими проблемами:
- Каждый файл имеет уникальный хэш, в зависимости от его содержания, а не временной отметки.
- Каждый каталог также имеет свой хэш, в зависимости от файлов в каталоге и их хэшей.
- Даже простое изменение глубоко внутри дерева исходных текстов приводит к корневой директории, чтобы иметь различный хеш из-за вышеуказанные правила
Такого механизма мог бы помочь сделать инструменты для сборки гораздо быстрее, потому что обнаружение изменения в исходном дереве является простой операцией хэш-сравнения. Если хэш корневого каталога исходного дерева изменился, это означает, что изменение произошло глубже в исходном дереве, поэтому продолжайте сканировать дерево рекурсивно для изменений - точно так же, как Git делает для обнаружения изменений.
Это не обязательно означает, что это исходное дерево должно управляться Git. Моя идея заключается в том, что файловая система автоматически предоставит хэш-код файла как один из его атрибутов/метаданных, поэтому инструмент построения может полагаться на это, а не на метку времени. И, кроме того, хэш каталога автоматически отражает состояние файла в нем.
Я уже немного ознакомился с ZFS Sun, но я не уверен, что это полное решение для быстрого создания сборки.
Что вы думаете об этой идее? Есть ли уже такая файловая система? Есть ли такой инструмент построения?
Я думаю, что основная проблема заключается в том, что файловая система и инструменты сборки (или любые другие инструменты) должны * обе * поддерживать эту функциональность. И это условие может быть выполнено только на некоторых «закрытых» платформах, где одна группа разрабатывает как файловую систему, так и инструменты сборки. –
Я согласен, но как и во всех улучшениях: кто-то должен сделать первый шаг вперед, а остальные присоединятся позже. Можно добавить хэш-сравнение файлов для создания инструмента, как только файловая система поддерживает это. –
Я думаю, что хотя бы make будет иметь проблемы, так как make использует только временные метки файловой системы, чтобы определить, какие цели нужно перестроить. Нужна новая make-подобная программа, которая может обрабатывать контрольные суммы. – Rudi