Я прочитал книгу по Subversion, и мне стало ясно, что Subversion хранит не отдельные файлы, а только дельты, чтобы минимизировать дисковое пространство. Subversion делает то же самое и с двоичными файлами (раньше это было огромной слабостью CVS).
Однако я не понимаю точного механизма. Что происходит, когда я фиксирую файл?
- Subversion хранит только разницу (и уже имеет старую версию)
- Subversion удаляет предыдущую версию, сохраняет новый файл без изменений и создает обратную разницу, чтобы «воссоздать» старую версию, если это необходимо.
- Что-то еще, о чем я не подумал.
Первый случай может показаться наиболее логичным. Однако здесь возникает другой вопрос. Если у меня в репозитории Subversion есть файл с 1000 коммитов, а новый разработчик проверяет чистую копию, тогда Subversion должна будет получить исходную версию (начальный импорт) и применить к ней 1000 изменений перед возвратом результата. Это правильно? Есть ли какое-то кеширование для файлов, в которых также хранится последняя версия?
В принципе, где я могу найти информацию о внутреннем устройстве репозитория svn?
Обновление. По-видимому, большую роль в этом играет внутренняя часть Subversion. На момент написания FSFS использует вариант 1, а BDB - вариант 2. Спасибо, msemack!