Работали ли вы с SVN (Subversion)?

«Работали ли вы с SVN (Subversion)?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал с SVN в legacy-проектах и при миграции на Git. SVN — это централизованная система контроля версий, которая отличается от распределенной архитектуры Git.

Основные команды, которые использовал:

# Клонирование репозитория
svn checkout https://svn.example.com/project/trunk project-folder

# Обновление локальной копии
svn update

# Проверка статуса изменений
svn status

# Добавление новых файлов
svn add filename.php

# Коммит изменений
svn commit -m "Исправлена ошибка авторизации"

# Создание ветки
svn copy https://svn.example.com/project/trunk 
         https://svn.example.com/project/branches/feature-auth 
         -m "Создание ветки для новой системы авторизации"

# Слияние изменений
svn merge https://svn.example.com/project/branches/feature-auth

Ключевые отличия от Git:

  1. Централизованная архитектура — нет локальных репозиториев, все операции с сервером
  2. Ветвление через копирование — ветки создаются как копии директорий
  3. Номера ревизий — глобальные, последовательные номера для всего репозитория
  4. Меньше возможностей для локальной работы — многие операции требуют подключения к серверу

Пример разрешения конфликтов:

# При обновлении получаем конфликт
svn update
# Конфликтующие файлы помечаются как 'C'

# Ручное разрешение конфликта
# Редактируем файл, убираем маркеры конфликта <<<<<<< .mine, =======, >>>>>>> .r123

# Сообщаем SVN, что конфликт разрешен
svn resolved filename.php

# Коммитим изменения
svn commit -m "Разрешен конфликт слияния"

Миграция с SVN на Git: Участвовал в нескольких миграциях, используя git svn для сохранения истории коммитов.