xenon
@xenon
Too drunk to fsck

Какой формат (с изменениями) эффективнее хранится в Git?

Представим Wiki, которая хранит все страницы в каком-то одном файле. Естественно, страницы иногда немного изменяются. Мы можем взять SQLite базу или хранить в "текстовых" JSON/YAML/TOML или как-то иначе. Хочется, чтобы при небольших изменениях контента в Git-репозитории тоже были небольшие (по размеру) изменения.

Как я понимаю, сложные бинарные форматы (sqlite) тут подойдут хуже (есть риск, что изменив букву, у нас весь бинарный файл заново загрузится). А какой формат был бы лучше? Или лучше "изобретать" свой оптимизированный под это формат?
  • Вопрос задан
  • 197 просмотров
Решения вопроса 2
paran0id
@paran0id
Умный, но ленивый
Всё правильно понимаете - текстовые форматы лучше.
Ответ написан
Комментировать
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Git заточен на отслеживание только текстовых файлов. Они будут храниться эффективно, без дублирования. Двоичные файлы будут сохраняться в репо каждый раз целиком, даже если изменили один байт.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@mayton2019
Bigdata Engineer
Вам надо в git складывать не бэкапы Sqlite а текстовое представление wiki по состоянию на сегодняшний день. Насколько я помню там есть
свой язык форматирования типа markup. Так что все будет норм.
Ответ написан
sqlite3 file.sqlite3 .dump > dump-`date +'%F %T'`.sql

и заносим файл dump-`date +'%F %T'`.sql в Git.
Или использовать другие VCS. Допустим, Subversion (использует xdelta для эффективного хранения).

Добавлено:
Нет, туплю. Суффикс -`date +'%F %T'` не нужен, иначе Git не будет хранить версии, а будет хранить множество файлов дампа.
Ответ написан
Комментировать
Хочется, чтобы при небольших изменениях контента в Git-репозитории тоже были небольшие (по размеру) изменения.

Атомарная единица версионирования в Git - это файл. Изменения в разных файлах никогда не приводят к конфликту на уровне Git (это может быть конфликт на уровне структуры самого приложения, но Гита это вообще никак не касается). Изменения в одном и том же файле в разных ветках приводят к конфликту в момент слияния, который Гит может иногда разрулить сам, например если файл текстовый и изменения далеко друг от друга, а может и не разрулить.

Если вы хотите какие-то элементы данных рассматривать независимо (например страницы Вики), кладите их в разные файлы, желательно текстовые.

Посмотрите как Wiki реализована на Гитхабе - это ж тоже просто гитовая репа, где каждая статья - отдельный файл.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы