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

Ответ

Да, работал с 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 для сохранения истории коммитов.

Ответ 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 отличается, ёпта:

  1. Всё на одном сервере — локального репозитория нет, чуть интернет упал, и ты как манда с ушами сидишь, нихуя не можешь.
  2. Ветвление — это копирование папки — не как в Git, а прям физически директорию копируешь на сервере. Выглядит как какой-то полупидорский костыль.
  3. Номера ревизий глобальные — на весь репозиторий один сквозной счётчик. Типа «ревизия 1488». И все знают, что это ты там накосячил.
  4. Без сервера — ноль возможностей — историю посмотреть? На сервер. Ветку создать? На сервер. Доверия ебать ноль к твоему компьютеру.

Как конфликты решали, ядрёна вошь:

# Обновляешься, а тебе — бац, конфликт
svn update
# Файлы помечаются буквой 'C' — welcome to hell

# Сидишь, руками разгребаешь эту кашу
# Убираешь эти ебушки-воробушки: <<<<<<< .mine, =======, >>>>>>> .r123

# Говоришь SVN, что ты герой и всё порешал
svn resolved filename.php

# И коммитишь, надеясь, что ничего не сломал
svn commit -m "Разрешен конфликт слияния"

А миграция с SVN на Git... Это был пиздец, чувак. Участвовал в таком. Использовали git svn, чтобы хоть как-то историю коммитов сохранить, а то люди ж привязаны к своим старым грехам. В общем, адок, но пережили.