Skip to main content

В чем заключаются различия между Subversion и Git?

Репозитории Subversion (SVN) похожи на репозитории Git, но есть несколько различий, если говорить об архитектуре проектов.

Структура каталогов

Каждая ссылка, или помеченный моментальный снимок фиксации, в проекте находится в определенных подкаталогах, таких как trunk, branches и tags. Например, проект SVN с двумя функциями, находящимися в разработке, может выглядеть следующим образом:

  sample_project/trunk/README.md
  sample_project/trunk/lib/widget.rb
  sample_project/branches/new_feature/README.md
  sample_project/branches/new_feature/lib/widget.rb
  sample_project/branches/another_new_feature/README.md
  sample_project/branches/another_new_feature/lib/widget.rb

Рабочий процесс SVN выглядит следующим образом:

  • Каталог trunk представляет последний стабильный выпуск проекта.
  • Функции, над которыми ведется активная работа, находятся в подкаталогах в каталоге branches.
  • После завершения работы над функцией каталог функции объединяется с trunk и удаляется.

Проекты Git также хранятся в отдельном каталоге. Однако Git скрывает сведения о своих ссылках, сохраняя их в специальном каталоге .git. Например, проект Git с двумя функциями, находящимися в разработке, может выглядеть следующим образом:

  sample_project/.git
  sample_project/README.md
  sample_project/lib/widget.rb

Рабочий процесс Git выглядит следующим образом:

  • В каталоге .git репозитория Git хранится полный журнал всех ветвей и тегов репозитория.
  • Последний стабильный выпуск находится в ветви по умолчанию.
  • Функции, над которыми ведется активная работа, находятся в отдельных ветвях.
  • После завершения работы над функцией каталог функции объединяется с ветвью по умолчанию и удаляется.

В отличие от SVN при использовании Git структура каталогов остается одинаковой, но содержимое файлов изменяется в зависимости от ветви.

Включение вложенных проектов

Подпроект — это проект, разработка и управление которым осуществляется вне рамок вашего основного проекта. Обычно вы импортируете подпроект, чтобы добавить некоторые функции в проект без необходимости поддерживать код самостоятельно. При каждом обновлении подпроекта можно синхронизировать его с проектом, чтобы все содержимое подпроекта было актуальным.

В SVN подпроект называется внешним SVN. В Git он называется подмодулем Git. Хотя подмодули Git концептуально аналогичны подпроектам, они не обновляются автоматически; необходимо явно запросить добавление новой версии в проект.

Дополнительные сведения см. в разделе Подмодули инструментов Git в документации по Git.

Сохранение журнала

SVN настроен так, что предполагается, что журнал проекта никогда не изменяется. Git позволяет изменять предыдущие фиксации и изменения с помощью таких средств как git rebase.

GitHub поддерживает клиентов Subversion, что может приводить к непредвиденным результатам при использовании Git и SVN в одном проекте. Если вы изменили журнал фиксаций Git, эти же фиксации навсегда останутся в журнале SVN. Если вы случайно зафиксировали некоторые конфиденциальные данные, обратитесь к статье, которая поможет удалить их из журнала Git.

Примечание. Поддержка Subversion будет удалена из GitHub 8 января 2024 г. В будущем выпуске GitHub Enterprise Server после 8 января 2024 г. также будет удалена поддержка Subversion. Дополнительные сведения см. в блоге GitHub.

Дополнительные материалы