Subversion vs. Git

Привет, сегодня я хочу поговорить о двух, по моему мнению, самых успешных системах контроля версий Subversion и Git. В своей практике я сталкивался с множеством VCS, включая такие экзотические системы как Jedi VCS. Мой личный путь миграции можно кратко описать так: CVS -> SVN -> Git.

Коммиты


Git благодаря наличию локального хранилища позволяет делать «отложенные» коммиты. «Отложенные» коммиты попадают в основное хранилище, только когда вы проталкиваете (push) их туда. Можно делать такие мелкие коммиты, какие вам захочется, не заботясь о том, красная полоска или зеленая – главное, чтобы при проталкивании изменений в основное хранилище полоска была зеленой (вы ведь пишите тесты?;)) Таким образом, коммит становиться для разработчика просто точкой возврата.

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

Ветки


Git обладает очень мощным механизмом ветвления, благодаря чему многие команды разработчиков каждую новую фичу разрабатывают в отдельной ветке, которая сливается с основной только после ее реализации. В основной ветке находиться версия в любой момент готовая к внедрению у заказчика.
В SVN ветки используются в основном для сохранения уже выпущенных версий продукта, а вся разработка ведется в основной ветке, со всеми вытекающими отсюда последствиями.

Метаданные

SVN хранит метаданные по каждой папке отдельно в подпапках .svn. Этих метаданных чрезвычайно много, и при интенсивной работе над проектом (у нас каждый делает по 10-15 коммитов в день) файловая система сильно засоряется и часто приходиться производить дефрагментацию.

Git хранит метаданные более компактно, в одном месте - в подпапке .git корневой директории проекта. Но за всё нужно платить – нельзя скачать часть репозитория как в SVN, только весь.

Вместо заключения

Git благодаря своей огромной гибкости подходит для больших и/или распределенных команд, но более сложен в освоении.
SVN подходит для небольших команд из 2-3 человек, физически находящихся в одном помещении (хотя есть исключения).
Для операционных систем Windows для Subversion и Git есть очень удобные графические оболочки, встраивающиеся в проводник – TortoiseSVN и TortoiseGit соответственно.
Для тех кто хочет мигрировать с SVN на Git в состав Git включена утилита git-svn, позволяющая делать двустороннюю синхронизацию между хранилищами.
comments powered by Disqus