Подтвердить что ты не робот

Как именно файлы subversion хранят в репозитории?

Я читаю книгу подрывников, и мне ясно, что подрывная деятельность не хранит отдельные файлы, а только дельта, чтобы минимизировать дисковое пространство. Subversion также делает то же самое с бинарными файлами (это было огромной слабостью CVS).

Однако я не понимаю точного механизма. Когда я делаю файл, что происходит?

  • Subversion хранит только diff (и уже имеет старую версию)
  • Subversion удаляет предыдущую версию, сохраняет новый файл без изменений и создает обратный diff, чтобы при необходимости "повторно создать" старую версию.
  • Что-то еще, о чем я не думал.

Первый случай может показаться наиболее логичным. Это, однако, вызывает другой вопрос. Если у меня есть в репозитории subversion файл с 1000 коммитов, а новый разработчик проверяет чистую копию, тогда подрывная деятельность должна будет получить исходную версию (первоначальный импорт) и применить к ней 1000 diff, прежде чем возвращать результат. Это верно? Существует ли какое-то кэширование файлов, в которых сохраняется и последняя версия?

В основном, где я могу найти информацию о внутренних хранилищах svn?

Обновление: Очевидно, что бэкэнд подрывной деятельности играет большую роль в этом. В то время или запись FSFS использует вариант 1, в то время как BDB использует вариант 2. Спасибо msemack!

4b9b3361

Ответ 1

Поскольку формат репозитория Subversion полностью внутренне, они могут изменять представление из одной версии в другую. Я считаю, что текущая ревизия обычно хранит обратные дельта (ваш вариант 2), но также периодически сохраняет полные моментальные снимки, поэтому ему не нужно разрешать 1000 разностей перед возвратом результата.

В примечаниях к выпуску Subversion 1.6 есть раздел "Улучшения файловой системы" , в котором есть некоторые заметки об этом и ссылки на другие источники. Достаточно сказать, что детали хранения данных Subversion сложны и могут быть изменены.

В дереве исходных текстов Subversion также содержится проектный документ, в котором описывается использование пропустить дельта в Subversion. Как правило, каталог /notes/ содержит несколько полезных документов, касающихся внутренних элементов Subversion.

Ответ 2

Из документа Subversion Design (который довольно устарел) вы можете получить это:

Как и многие другие системы контроля версий, хранилища Subversion меняются как различия. Он не делает полные копии узлов; вместо этого он сохраняет последнюю версию как полный текст и предыдущие версии как последовательность обратных различий (слово "diff" используется здесь свободно - для файлов это означает "vdeltas", для каталогов, это означает формат, который выражает изменения в каталоги).

Я не думаю, что это было изменено с тех пор.

Также см. Метод Bubble-Up.

Ответ 4

может вам помочь регулярная спецификация FSFS.

Или, если вы используете Berkeley DB, здесь спецификация для этого.

FSFS использует обратные дельта для хранения изменений и skip-deltas, чтобы ускорить некоторые действия, если я все правильно понял.

Ответ 5

Каждый раз, когда вы совершаете изменения, хранилище хранит новую версию это общее дерево репозитория и маркирует новое дерево новым номер ревизии. Конечно, большая часть дерево такое же, как и ревизия до, за исключением частей, которые вы изменилось.

Новый номер версии - это последовательная метка, которая применяется к всего нового дерева, а не только файлов и каталоги, которые вы коснулись пересмотр. Однако, в просторечии, номер ревизии используется для обозначения изменение, внесенное в этот пересмотр; например, "изменение в r588", ( "r588" является сокращением для "пересмотра 588" ) действительно означает "различие между деревьями 587 и 588 репозитория", или по-другому ", внесенное изменение к дереву 587 для получения дерева 588".

Взгляните на: Вопросы Subversion