Создание эффективной системы контроля версий без дублирования файлов

Хранение полных копий файлов для каждой версии или форка приводит к пустой трате места. Если вы измените одну строку в проекте из десяти файлов, вам не нужно заново сохранять все десять файлов.

Я столкнулся с этой проблемой при разработке своего проекта LaTeX Writer. Мне нужен был способ управления версиями и форками проектов без высоких затрат на хранение данных.

Я изучил принцип работы GitHub. GitHub не сохраняет полный репозиторий каждый раз, когда вы вносите изменения. Он хранит контент отдельно и использует ссылки для связи файлов и коммитов.

Я построил свою систему на основе трех основных компонентов:

Система работает на основе хеширования контента. Когда вы сохраняете файл, система генерирует уникальный ID на основе его содержимого. Если такой контент уже существует, система повторно использует существующий Blob. Новый не создается.

Такой подход делает форки простыми и дешевыми. Когда вы делаете форк проекта:

При форке фактический контент файлов не копируется. Вы дублируете только небольшие записи метаданных.

При редактировании форка процесс остается эффективным:

Этот метод дает несколько преимуществ:

Вы получаете функциональность, подобную GitHub, без огромных затрат на хранение.

Источник: https://dev.to/prashant_patil_49/building-github-inspired-version-control-and-forking-without-duplicating-project-files-5aap