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

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

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

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

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

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


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

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

После завершения 1.0.0 terminology вы разветвляете ствол на svn новую ветвь «1.0» и создаете branching тег «1.0.0». Сейчас работа trunk над тем, что в конечном итоге nomenclature станет 1.1, продолжается svn в багажнике.

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

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

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

Как только trunk вы обнаружите достаточно svn ошибок (или, может быть, одну branches критическую ошибку), вы решите branch сделать релиз 1.0.1. Итак, вы trunk делаете тег "1.0.1" из branch ветки 1.0 и выпускаете код. На trunk этом этапе ствол будет содержать wording то, что будет 1.1, а ветка svn «1.0» будет содержать код branching 1.0.1. В следующий раз, когда wording вы выпустите обновление до 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

В конце svn концов вы почти готовы выпустить wording 1.1, но сначала хотите сделать branches бета-версию. В этом случае subversion вы, вероятно, делаете ветку branch «1.1» и тег «1.1beta1». Теперь branching работа над тем, что будет branch 1.2 (или, может быть, 2.0), продолжается programming-terms в стволе, но работа над 1.1 branching продолжается в ветке «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

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

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


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

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

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


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

svn

branch

terminology

trunk

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