2012-05-28 2 views
6

Мой вопрос более общий, чем указано в заголовке.Как система контроля версий восстанавливает ревизию?

Я знаю, что контроль версий версий хранит информацию только о различиях. Как я понимаю, так и Википедия, а также github.

Но у всех есть возможность показать весь файл с особой ревизией. Они поэтапно восстанавливают его с первой версии на конкретную?

И еще один вопрос. Если они сохраняют различия только, как они показывают их в ui с контекстом (немного текста до и после изменений).

EDIT: GitHub хранит целые снимки вместо дельт

ответ

6

Я знаю, что источник управления версиями хранят информацию только о различиях.

Поскольку вопрос Git design decision on storing content rather than differences показывает, что это не точно, что делает Git.
Он имеет «упакованный» формат, однако, для хранения объектов в деформированной форме, используя двоичную дельта из библиотеки LibXDiff. Но это в основном используется для сетевой передачи.
См. "Is the git binary diff algorithm (delta storage) standardized?".
Вот почему git «resolving delta», когда вы забираете.

4

Для получения очень интересной информации о преимуществах и недостатках различных способов хранения данных контроля версий я настоятельно рекомендую прочитать статью Эрика Синка Time and Space Tradeoffs in Version Control Storage.

Хранение является одной из самых сложных задач для системы контроля версий . Для каждого файла мы должны хранить каждую версию, имеющую . Логический размер репозитория управления версиями никогда не сжимается. Он просто продолжает расти и расти, и каждая старая версия должна оставаться доступной.

Итак, что является лучшим способом сохранить каждую версию всего?

3

Wikipedia, к сожалению ... хранит каждую ревизию в базе данных в виде XML (?) В виде текста.

Взгляните на wikipedia database schema. В частности, последние изменения и текст.

Следовательно, у них есть замечательный O (1) поиск первой копии страницы «биология». У этого есть неудачный побочный эффект, вызвавший technology cost wikipedia на воздушный шар от $ 8 млн USD в 2010-2011 годах до 12 миллионов долларов США в 2011-2012 годах. Это несмотря на то, что жесткие диски (и все остальное) становятся дешевле, а не дороже.

Так много для контроля версий хранения каждого файла. Гит берет милый подход. См. Is the git storage model wasteful?.

В нем хранится каждый файл, аналогичный описанному выше методу. Как только пространство, занятое репо, превышает определенный предел, он выполняет переустановку грубой силы (существует возможность установить, как сильно он пытается - --window = [N], --depth = [N]), что может занять несколько часов.Он использует комбинацию дельта и сжатия без потерь для упомянутой репаки (рекурсивно дельта, а затем применяет без потерь к любым битам, которые у вас есть).

Другие, такие как SVN, используют простое дельта-сжатие. (из памяти, которой вы не должны доверять).

Сноска: Дельта-компрессия сохраняет инкрементные изменения. сжатие без потерь в значительной степени похоже на zip, rar и т. Д.

Смежные вопросы