Что означают «ветвь», «тег» и «ствол» в репозиториях Subversion?

Прежде всего, как отмечают trunk @AndrewFinnell и @KenLiu, в nomenclature SVN имена каталогов сами terminology по себе ничего не значат wording — «магистраль, ветки и теги» — это svn просто общепринятое соглашение, которое branch используется в большинстве svn репозиториев. Не все проекты branching используют все каталоги (довольно svn распространено вообще не branching использовать «теги»), и на programming-terms самом деле ничто не мешает nomenclature вам называть их как угодно, хотя trunk нарушение соглашения часто wording сбивает с толку.

Я опишу, наверное, самый branching распространенный сценарий wording использования веток и тегов, и programming-terms приведу пример сценария их branching использования.

  • Ствол: Основная wording область разработки. Именно trunk здесь живет ваш следующий branches основной выпуск кода, и, как svn правило, он содержит все programming-terms новейшие функции.

  • Ветки: каждый branches раз, когда вы выпускаете trunk основную версию, создается svn ветка. Это позволяет вам terminology исправлять ошибки и выпускать nomenclature новую версию, не выпуская subversion новейшие — возможно, незавершенные subversion или непроверенные — функции.

  • Теги: каждый subversion раз, когда вы выпускаете branch версию (финальный выпуск, кандидаты branching на выпуск (RC) и бета-версии), вы wording делаете для нее тег. Это wording дает вам копию кода на определенный wording момент времени в том виде, в branches каком он был в этом состоянии, что trunk позволяет вам вернуться и subversion воспроизвести любые ошибки, если subversion это необходимо, в прошлой branching версии или повторно выпустить programming-terms прошлую версию точно такой, какой subversion она была. Ветки и теги в trunk SVN легковесны - на сервере programming-terms он не делает полную копию branching файлов, а просто маркер с branching надписью «эти файлы были branches скопированы в этой версии», который branching занимает всего несколько svn байтов. Имея это в виду, вы trunk никогда не должны беспокоиться branch о создании тега для любого terminology выпущенного кода. Как я уже trunk говорил ранее, теги часто programming-terms опускаются, и вместо этого wording журнал изменений или другой branching документ уточняет номер версии branch при выпуске релиза.


Например, допустим, вы trunk начинаете новый проект. Вы branching начинаете работать в «багажнике», над branches тем, что в конечном итоге programming-terms будет выпущено как версия nomenclature 1.0.

  • trunk/ — версия в разработке, скоро будет 1.0
  • ветки/ - пусто

После завершения 1.0.0 branches вы разветвляете ствол на branch новую ветвь «1.0» и создаете programming-terms тег «1.0.0». Сейчас работа terminology над тем, что в конечном итоге wording станет 1.1, продолжается wording в багажнике.

  • trunk/ - версия в разработке, скоро будет 1.1
  • ветки/1.0 - релизная версия 1.0.0
  • теги/1.0.0 - релизная версия 1.0.0

Вы находите какие-то trunk ошибки в коде, исправляете wording их в транке, а затем объединяете trunk исправления в ветку 1.0. Вы terminology также можете сделать обратное wording и исправить ошибки в ветке subversion 1.0, а затем объединить их branches обратно в основную часть, но branches обычно проекты придерживаются branch одностороннего слияния только nomenclature для того, чтобы уменьшить programming-terms вероятность того, что что-то branching упущено. Иногда ошибку можно terminology исправить только в 1.0, потому branches что она устарела в 1.1. На branches самом деле это не имеет значения: вы wording просто хотите убедиться, что programming-terms вы не выпускаете 1.1 с теми nomenclature же ошибками, которые были terminology исправлены в 1.0.

  • trunk/ - версия в разработке, скоро будет 1.1
  • ветки/1.0 - предстоящий выпуск 1.0.1
  • теги/1.0.0 - релизная версия 1.0.0

Как только programming-terms вы обнаружите достаточно svn ошибок (или, может быть, одну trunk критическую ошибку), вы решите terminology сделать релиз 1.0.1. Итак, вы branching делаете тег "1.0.1" из subversion ветки 1.0 и выпускаете код. На wording этом этапе ствол будет содержать programming-terms то, что будет 1.1, а ветка trunk «1.0» будет содержать код branching 1.0.1. В следующий раз, когда trunk вы выпустите обновление до trunk 1.0, это будет 1.0.2.

  • trunk/ - версия в разработке, скоро будет 1.1
  • ветки/1.0 - предстоящий выпуск 1.0.2
  • теги/1.0.0 - релизная версия 1.0.0
  • tags/1.0.1 - релизная версия 1.0.1

В конце branch концов вы почти готовы выпустить branches 1.1, но сначала хотите сделать branches бета-версию. В этом случае terminology вы, вероятно, делаете ветку nomenclature «1.1» и тег «1.1beta1». Теперь nomenclature работа над тем, что будет branch 1.2 (или, может быть, 2.0), продолжается wording в стволе, но работа над 1.1 terminology продолжается в ветке «1.1».

  • trunk/ - версия в разработке, скоро будет 1.2
  • ветки/1.0 - предстоящий выпуск 1.0.2
  • branch/1.1 - грядущий выпуск 1.1.0
  • теги/1.0.0 - релизная версия 1.0.0
  • теги/1.0.1 - релизная версия 1.0.1
  • tags/1.1beta1 - релизная версия 1.1 beta 1

Как branch только вы выпускаете финальную subversion версию 1.1, вы делаете тег wording "1.1" из ветки terminology "1.1".

Вы также subversion можете продолжать поддерживать branching 1.0, если хотите, перенося subversion исправления ошибок между subversion всеми тремя ветвями (1.0, 1.1 branch и основной). Важным выводом svn является то, что для каждой branch основной версии программного subversion обеспечения, которое вы поддерживаете, у branch вас есть ветка, содержащая trunk последнюю версию кода для subversion этой версии.


Другое использование trunk ветвей для функций. Здесь programming-terms вы разветвляете ствол (или branching одну из веток релиза) и работаете branch над новой функцией изолированно. Как svn только функция завершена, вы wording снова объединяете ее и удаляете terminology ветку.

  • trunk/ - версия в разработке, скоро будет 1.2
  • ветки/1.1 - предстоящий выпуск 1.1.0
  • ветки/UI-rewrite - ветка экспериментальной функции

Идея этого заключается branch в том, что вы работаете над trunk чем-то разрушительным (что programming-terms будет задерживать или мешать terminology другим людям выполнять свою nomenclature работу), над чем-то экспериментальным terminology (что, возможно, даже не будет nomenclature реализовано) или, возможно, просто programming-terms над чем-то, что займет много wording времени. время (и вы боитесь, если branching он задержит выпуск 1.2, когда svn вы будете готовы разветвить wording 1.2 из магистрали), вы можете subversion сделать это изолированно svn в ветке. Как правило, вы branches поддерживаете его в актуальном programming-terms состоянии с помощью ствола, постоянно branch внося в него изменения, что branch упрощает повторную интеграцию programming-terms (слияние обратно в ствол), когда subversion вы закончите.


Также обратите branches внимание, что схема управления trunk версиями, которую я использовал nomenclature здесь, является лишь одной branch из многих. Некоторые команды branches будут выпускать исправления svn ошибок/поддерживающие выпуски terminology как 1.1, 1.2 и т. д., а основные wording изменения — как 1.x, 2.x trunk и т. д. Здесь используется trunk то же самое, но вы можете nomenclature назвать ветку «1» или «1». .x" вместо branches "1.0" или "1.0.x". (Кроме nomenclature того, semantic versioning — хорошее руководство wording о том, как делать номера wording версий).

svn

branch

terminology

trunk

2022-10-14T02:57:51+00:00