Почему в проекте использовали SVN вместо Git?

Ответ

В одном из моих прошлых проектов в крупной финансовой компании мы использовали Subversion (SVN) в качестве основной системы контроля версий. Это решение было обусловлено не техническим превосходством SVN над Git, а корпоративными и историческими требованиями.

Контекст и причины:

  1. Централизованная модель и контроль доступа: Инфраструктура компании была построена вокруг централизованных серверов с жесткими политиками информационной безопасности. Модель SVN с единым репозиторием и четким управлением правами доступа на уровне каталогов (path-based authorization) лучше интегрировалась с существующими системами аудита и Active Directory.

  2. Работа с крупными бинарными файлами: Проект включал значительное количество бинарных артефактов (отчеты, конфигурации специфичных систем). SVN исторически лучше справляется с бинарными файлами благодаря атомарным коммитам и модели "lock-edit-unlock" (хотя это и не идеально). В то время инструменты для Git LFS (Large File Storage) были менее развиты.

  3. Простота линейной истории для некодирующих специалистов: Над проектом работали не только разработчики, но и аналитики, тестировщики, которые вносили изменения в документацию и конфиги. Для них линейная, последовательная история коммитов SVN была проще для восприятия, чем распределенная, нелинейная история Git с ее rebase и merge.

  4. Наследие и стоимость перехода: К моменту моего прихода в проект инфраструктура (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 работали. Ёпта, не потому что он круче, а потому что так сложилось, ебать мои старые костыли.

Почему так вышло, или «Чёрта в душу, в сердцу мать!»

  1. Централизованность и контроль доступа. Представь себе: огромная контора, сервера, безопасность, всё по уставу. SVN с его одним главным репозиторием и правами доступа к папкам — это было то, что доктор прописал. С ним было проще всё аудировать и через Active Directory управлять. Доверия к распределённой системе, где у каждого своя копия всего, было, блядь, ноль. Боялись, что кто-то что-то утащит.

  2. Работа с бинарниками. А там, ёклмн, куча бинарных файлов было: отчёты, конфиги всяких легаси-систем. SVN с ними хоть как-то, но справлялся. А в те времена Git LFS был ещё тот фрукт, незрелый. Так что выбор был очевиден.

  3. Простота для не-разработчиков. Там же не только мы, прогеры, были. Аналитики, тестеры — они тоже в документацию лезли. Им линейная история SVN, где всё по порядку, была понятнее, чем этот цирк с ветками в Git, где rebase и merge. Для них это был, прости, пиздопроебибна какой-то.

  4. Наследие, блядь. Ко всему этому прикручены были 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-мире иногда приходится танцевать с бубном вокруг старого, вротберунчик, монолита.