Ответ
В одном из моих прошлых проектов в крупной финансовой компании мы использовали Subversion (SVN) в качестве основной системы контроля версий. Это решение было обусловлено не техническим превосходством SVN над Git, а корпоративными и историческими требованиями.
Контекст и причины:
-
Централизованная модель и контроль доступа: Инфраструктура компании была построена вокруг централизованных серверов с жесткими политиками информационной безопасности. Модель SVN с единым репозиторием и четким управлением правами доступа на уровне каталогов (
path-based authorization) лучше интегрировалась с существующими системами аудита и Active Directory. -
Работа с крупными бинарными файлами: Проект включал значительное количество бинарных артефактов (отчеты, конфигурации специфичных систем). SVN исторически лучше справляется с бинарными файлами благодаря атомарным коммитам и модели "lock-edit-unlock" (хотя это и не идеально). В то время инструменты для Git LFS (Large File Storage) были менее развиты.
-
Простота линейной истории для некодирующих специалистов: Над проектом работали не только разработчики, но и аналитики, тестировщики, которые вносили изменения в документацию и конфиги. Для них линейная, последовательная история коммитов SVN была проще для восприятия, чем распределенная, нелинейная история Git с ее rebase и merge.
-
Наследие и стоимость перехода: К моменту моего прихода в проект инфраструктура (CI/CD, системы развертывания, скрипты) была глубоко интегрирована с SVN. Миграция на Git потребовала бы значительных финансовых и временных затрат на переобучение всей команды и перестройку процессов, что бизнес не счел целесообразным на тот момент.
Технические сравнения в нашем workflow:
# SVN: Централизованный workflow
svn checkout http://svn.company.com/proj/trunk
# ... вносим изменения ...
svn update # Всегда получаем последнюю версию с сервера
svn commit -m "JIRA-123: Fix calculation" # Прямой коммит в центральный репозиторий
# Git (который мы использовали локально для экспериментов):
git clone git@server.com:repo.git
git checkout -b feature/JIRA-123
git commit -m "WIP"
git push origin feature/JIRA-123 # Push в удаленную ветку для review
Вывод: Выбор SVN был прагматичным решением, основанным на организационных ограничениях, а не на технических предпочтениях. Для чистого разработческого процесса, особенно с необходимостью частого ветвления и слияния, Git, безусловно, предлагает более мощные и гибкие возможности. В последующих проектах я успешно мигрировал команды на Git, реализуя преимущества его распределенной модели.
Ответ 18+ 🔞
А вот это, блядь, реальная история, я тебе щас расскажу, как мы в одной конторе финансовой с SVN работали. Ёпта, не потому что он круче, а потому что так сложилось, ебать мои старые костыли.
Почему так вышло, или «Чёрта в душу, в сердцу мать!»
-
Централизованность и контроль доступа. Представь себе: огромная контора, сервера, безопасность, всё по уставу. SVN с его одним главным репозиторием и правами доступа к папкам — это было то, что доктор прописал. С ним было проще всё аудировать и через Active Directory управлять. Доверия к распределённой системе, где у каждого своя копия всего, было, блядь, ноль. Боялись, что кто-то что-то утащит.
-
Работа с бинарниками. А там, ёклмн, куча бинарных файлов было: отчёты, конфиги всяких легаси-систем. SVN с ними хоть как-то, но справлялся. А в те времена Git LFS был ещё тот фрукт, незрелый. Так что выбор был очевиден.
-
Простота для не-разработчиков. Там же не только мы, прогеры, были. Аналитики, тестеры — они тоже в документацию лезли. Им линейная история SVN, где всё по порядку, была понятнее, чем этот цирк с ветками в Git, где rebase и merge. Для них это был, прости, пиздопроебибна какой-то.
-
Наследие, блядь. Ко всему этому прикручены были CI/CD, скрипты развёртывания — всё заточено под SVN. Миграция на Git означала бы овердохуища денег и времени на переделку всего и переобучение людей. Бизнес сказал: «Да похуй, работает же».
Как это выглядело технически:
# SVN: Работаем как в старом добром офисе
svn checkout http://svn.company.com/proj/trunk
# ... что-то делаем ...
svn update # Тянешь всегда свежее с сервера, как будто газету
svn commit -m "JIRA-123: Fix calculation" # И сразу в централку, никаких тебе пулл-реквестов
# Git (мы его тихонько пробовали локально, для души):
git clone git@server.com:repo.git
git checkout -b feature/JIRA-123
git commit -m "WIP"
git push origin feature/JIRA-123 # А вот тут уже можно review сделать
Вывод, чувак. Выбор SVN — это был не про «Git — говно», а про то, что организация — хитрая жопа, которая диктует свои правила. Это прагматичное, хоть и устаревшее решение. Для нормальной разработки с ветвлением, конечно, Git — царь и бог. И в следующих проектах я, как только смог, всех на него и перевёл. А тот опыт с SVN просто напомнил, что в enterprise-мире иногда приходится танцевать с бубном вокруг старого, вротберунчик, монолита.