Вопрос по version-control, algorithm – Как система ревизионного контроля восстанавливает ревизию?

6

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

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

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

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

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

Ваш Ответ

3   ответа
4

Для очень интересного прочтения о плюсах и минусах различных способов хранения данных контроля версий я настоятельно рекомендую прочитать статью Эрика СинкаВремя и пространство Компромиссы в хранилище контроля версий.

Storage is one of the most difficult challenges for a version control system. For every file, we must store every version that has ever existed. The logical size of a version control repository never shrinks. It just keeps growing and growing, and every old version needs to remain available.

So, what is the best way to store every version of everything?

3

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

Посмотрите насхема базы данных википедии, Конкретно последние изменения и текст.

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

Так много для контроля версий хранения каждого файла. Git использует милый подход. УвидетьМодель хранения git расточительна?.

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

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

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

6

I know that source version control stores information only about differences.

Как вопросGit дизайн решение о хранении контента, а не различий иллюстрирует, что это не такexactly что делает Git
Он имеет "упакованный" хотя форматировать, чтобы хранить объекты в дельта-форме, используя двоичную дельту из библиотеки LibXDiff. Но это в основном используется для передачи по сети.
Смотрите & quot;Стандартизирован ли алгоритм git для двоичных различий (delta storage)?& Quot ;.
Вот почему git & quot;разрешающая дельта& Quot; когда вы получаете

Похожие вопросы