Существует множество систем контроля версий файлов. Какая из них лучше? Что выбрать — GIT или Subversion?
Каждый разработчик рано или поздно сталкивается с необходимостью отслеживать изменения в файлах программных проектов и приходит к выбору системы контроля версий.
Системы контроля версий используются не только программистами. Фактически, они будут полезны каждому, кто хотел бы иметь возможность при необходимости вернуться и просмотреть более раннюю версию документа или файла, который был изменен. По сути, популярный Dropbox — это система контроля версий файлов.
В этой статье я перечислю основные отличия системы контроля версий GIT от более консервативного и привычного многим Subversion.
Содержание
GIT сохраняет локально полную копию репозитория. Subversion хранит историю изменений на сервере
В Subversion репозиторий хранится на сервере — на компьютере сохранены только последние версии файлов. GIT сохраняет на вашем компьютере полную версию всей истории изменений.
Это различие принципиально меняет возможности по работе с документами.
Не нужно иметь доступа к серверу, чтобы сохранить в системе контроля версий измененный файл
Система контроля версий позволяет сравнивать и восстанавливать только те изменения, которые были сохранены в ней. Subversion требует для сохранения (коммита) в репозиторий измененного файла доступа к серверу по сети. GIT может сохранить новую версию файла в любой момент.
Благодаря наличию файлов локально GIT быстрее
Это действительно так — в большинстве операций, которые вы будете выполнять, GIT окажется быстрее, поскольку все происходит локально на вашем компьютере. Конечно, когда вы будете загружать изменения в репозитории на удаленный сервер, это потребует времени. (А держать систему контроля версий только на своем компьютере не очень разумно — особенно при наличии бесплатных хостингов для систем контроля версий). Но коммиты новых версий файлов, сравнение и просмотр изменений происходят практически моментально.
GIT хранит «слепки» файлов в сжатом виде. Subversion хранит изменения в файлах
Это является принципиальным отличием для пользователя — поскольку получаемый результат идентичен.
GIT обеспечивает целостность файлов
Для всех файлов, которые сохраняются в системе контроля версий, GIT использует хеш SHA1. На практике это исключает возможность изменения какого-то файла так, чтобы система контроля версий не заметила этого.
С GIT очень сложно потерять данные
Поскольку все изменения фактически сохраняются на вашем компьютере, а все изменения GIT на практике только добавляет к репозиторию, очень сложно что-то потерять. Если вы сохранили измененный файл в репозиторий, то его всегда можно будет восстановить к текущему состоянию. А если вы сохранили репозиторий на удаленный сервер командой git push, то вероятность потерять файл стремится к нулю.
Откровенно мне очень понравился GIT. Использование этой системы снимает некоторые ограничения, которые сложно реализовать, используя Subversion. Например, хранение одного репозитория на разных серверах можно, но сложно реализовать, а в GIT это стандартная функциональность. С другой стороны, использование Subverison в некоторых ситуациях может оказаться проще. А любая система контроля версий — это очень значительное улучшение по сравнению с ее отсутствием.