Найти в Дзене

Как потратить время впустую или выбор системы управления версиями для новичков

Любой программист, писавший проект дольше 1 дня, знает, что система управления версиями – жизненно необходимый продукт. Если вдруг кто не знает - Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое (цитата взята у тети Вики). Спора о необходимости использования быть не может. Я готов дискутировать с отрицателями, но если работа над проектом ведется дольше недели – отказаться от использования данного инструмента – этот как собирать мебель без отверток и шуруповерта. Можно, но риск собрать ерунду или застрять посреди процесса весьма велик. В общем, возникло у меня желание поделиться опытом и помочь с выбором системы новичкам.

Проблемы начинаются, когда перед вами стоит выбор конкретной системы. Список доступных систем у той же тети вики насчитывает более 30 самых разных продуктов. Мой личный опыт подсказывает, что в основном применяется Subversion или SVN(прямо сейчас применяю в рабочем процессе), Team Foundation Server, Git и Mercurial/Hg (применяю в домашней обстановке). В дальнейших своих рассуждениях я буду опираться на эти 4 системы, следовательно, если в моих словах есть упущение насчет более экзотичных систем – прошу простить и поправить.

В подавляющем большинстве случаев выбор за вас уже будет сделан. Вы сможете поныть про «самую лучшую систему управления версиями», но скорее всего это кончится ничем, а случай когда в этом будет смысл - я опишу пониже. Так какую же выбрать, если стоит необходимость? Моё мнение – совершенно без разницы, берите любую. Вопрос лицензий на применение того или иного продукта я брать не буду – я считаю что в нашей стране полно проблем с лицензиями и без этого. Я тут про удобство эксплуатации. Итак, поехали.

«Какая система проще в освоении?». Любая система управления версий использует один и тот же набор терминов и инструкций. Мастер-ветки, ветки, коммиты, мерджи. Это все одно и тоже вне зависимости от выбора системы. Да, есть нюансы. Например, в Git и Hg коммиты делаются локально, в то время как в SVN/TFS сразу отправляются на сервер. Однако общую концепцию работы это не меняет примерно никак. Возможно, возникнут проблемы у любителей консольных команд, но я не могу знать насколько много таких любителей. А вот про программное обеспечение таких систем чуть ниже.

«У какой системы лучше программное обеспечение?». На мой взгляд, это вопрос из 2005 года. Мы живем в 2019ом. Svn, Git и Mercurial вообще, фактически, имеют один и тот же клиент - Tortoise. Все упомянутые системы имеют плагины для сред разработки. Тут вообще нельзя придумать преимущества той или иной системы

«Какая система лучше подойдет моему проекту?». На подобный вопрос могу ответить только – «Знал бы прикуп – жил бы в Сочи». К сожалению, мы не знаем, как будет разрастаться наш проект. А если у нас будет 2 проекта, то они будут лежать в общей ветке или в разных репозиториях? Могу лишь сказать, что это один из тех случаев, когда вы можете на определенном этапе развития компании головой нащупать потолок выбранной системы и возникнет желание поменять на что-то более подходящее. Но к тому времени будут видны узкие места вашей структуры проекта, и можно будет конкретно продумывать оптимизацию. Вот, например хорошая статья о проблемах компании Яндекс на этом поприще

Так, где же реальная разница между этими системами? Ну, если всерьез копаться в истории – то можно просто обратить внимание что при выпуск новых систем, как правило, был связан с проблемами использования уже существующих систем в некотором проекте. Тот же Git разработан не для того чтобы программистам всего мира было удобно и не для того что бы захватить мир. Git решал проблемы при разработке ядра Linux с использованием BitKeeper. Поискав рейтинги или недостатки тех или иных систем управления можно узнать, например, что «SVN тормозит». Да, это действительно так. Но если у вас маленький проект и маленькая команда, то думаете это будет играть роль?

На этом мои мысли заканчиваются. В итоге, мне кажется, что не надо туманить себе мозг поиском преимуществ той или иной системы управления версиями. Если у вас откуда-то взялась лицензия на TFS(например, приобрели в качестве комплексного решения управления проектами) то не туманьте голову преимуществами Git. Ну, а если любите open-source, то можете бросить монетку, выбирая между Git и Mercurial. А если в руки попался SVN? Не смертельно. Его тоже используют много и густо не глядя на недостатки.