Ответ
Да, работал с 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:
- Централизованная архитектура — нет локальных репозиториев, все операции с сервером
- Ветвление через копирование — ветки создаются как копии директорий
- Номера ревизий — глобальные, последовательные номера для всего репозитория
- Меньше возможностей для локальной работы — многие операции требуют подключения к серверу
Пример разрешения конфликтов:
# При обновлении получаем конфликт
svn update
# Конфликтующие файлы помечаются как 'C'
# Ручное разрешение конфликта
# Редактируем файл, убираем маркеры конфликта <<<<<<< .mine, =======, >>>>>>> .r123
# Сообщаем SVN, что конфликт разрешен
svn resolved filename.php
# Коммитим изменения
svn commit -m "Разрешен конфликт слияния"
Миграция с SVN на Git: Участвовал в нескольких миграциях, используя git svn для сохранения истории коммитов.
Ответ 18+ 🔞
А, ну так, SVN... Ебать мои старые костыли, вспомнить страшно! Работал, конечно, на этих легаси-проектах, пока их на 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 отличается, ёпта:
- Всё на одном сервере — локального репозитория нет, чуть интернет упал, и ты как манда с ушами сидишь, нихуя не можешь.
- Ветвление — это копирование папки — не как в Git, а прям физически директорию копируешь на сервере. Выглядит как какой-то полупидорский костыль.
- Номера ревизий глобальные — на весь репозиторий один сквозной счётчик. Типа «ревизия 1488». И все знают, что это ты там накосячил.
- Без сервера — ноль возможностей — историю посмотреть? На сервер. Ветку создать? На сервер. Доверия ебать ноль к твоему компьютеру.
Как конфликты решали, ядрёна вошь:
# Обновляешься, а тебе — бац, конфликт
svn update
# Файлы помечаются буквой 'C' — welcome to hell
# Сидишь, руками разгребаешь эту кашу
# Убираешь эти ебушки-воробушки: <<<<<<< .mine, =======, >>>>>>> .r123
# Говоришь SVN, что ты герой и всё порешал
svn resolved filename.php
# И коммитишь, надеясь, что ничего не сломал
svn commit -m "Разрешен конфликт слияния"
А миграция с SVN на Git... Это был пиздец, чувак. Участвовал в таком. Использовали git svn, чтобы хоть как-то историю коммитов сохранить, а то люди ж привязаны к своим старым грехам. В общем, адок, но пережили.