Различные VCS используют разные подходы. Например, CVS создаст файл на сервере для каждого файла, который вы фиксируете. По сути, это файл в формате RCS; CVS - это всего лишь оболочка для RCS, которая запускает команды RCS для множества файлов в поддереве каталога (RCS может работать только с отдельными файлами).
Файл RCS содержит список изменений (номер версии, сообщение о регистрации и объем изменений). После этого приходит копия текущей версии HEAD. Остальные файлы - это различия между версиями ( длинное объяснение ).
Таким образом, CVS может быстро вернуть версию HEAD (которая чаще всего запрашивается) и может вычислять другие версии.
CVS не выполняет никакой проверки; если один из ваших файлов поврежден, вам нужна резервная копия. Поскольку CVS основан на RCS, он не может создавать версии каталогов и не может отслеживать переименования. CVS и RCS используют стандартную команду diff(1)
для создания различий.
Subversion (SVN) работает аналогично, но добавляет версии каталогов и переименовывает. Более того, SVN использует лучший алгоритм сравнения (xdelta), который дает меньший репозиторий.
Объяснение того, как работает Git , см. здесь .