Что такое & ldquo; ветка & rdquo ;, & ldquo; тег & rdquo; и & ldquo; багажник & rdquo; имеется ввиду в репозиториях Subversion?

Я много видел эти слова в обсуждениях Subversion (и, я думаю, в общем хранилище). Последние несколько лет я использовал SVN для своих проектов, но я никогда не понимал полную концепцию этих каталогов.

Что они имеют в виду?

1179
задан 31.01.2020, 07:58

11 ответов

Хм, не уверенный я соглашаюсь с тегом ре Nick, являющимся подобным ответвлению. Тегом является просто Соединительная линия маркера

  • , была бы основная часть разработки, происходящей из запуска проекта до подарка.

  • Ответвление будет копией кода, полученного из определенного момента в соединительной линии, которая используется для применения существенных изменений к коду при сохранении целостности кода в соединительной линии. Если существенные изменения работают согласно плану, они обычно объединяются назад в соединительную линию.

  • Тег будет моментом времени на соединительной линии или ответвлении, которое Вы хотите сохранить. Эти две главных причины для сохранения состояли бы в том, что или это - главная версия программного обеспечения, является ли альфа, бета, RC или RTM, или это наиболее устойчивой точкой программного обеспечения, прежде чем главные версии на соединительной линии были применены.

В проектах с открытым исходным кодом, основные ответвления, которые не приняты в соединительную линию заинтересованными сторонами проекта, могут стать основаниями для ветвления - например, полностью отдельные проекты, которые совместно используют общий источник с другим исходным кодом.

ответвление и поддеревья тега отличают от соединительной линии следующими способами:

Подрывная деятельность позволяет системным администраторам создавать сценарии рычага , которые инициированы для выполнения, когда определенные события имеют место; например, передавая изменение в репозитории. Типичной реализации репозитория Подрывной деятельности очень свойственно рассматривать любой путь, содержащий "/тег /" чтобы быть защищенным от записи после создания; конечный результат состоит в том, что теги, когда-то созданные, неизменны (по крайней мере, "обычным" пользователям). Это сделано с помощью сценариев рычага, которые осуществляют неизменность путем предотвращения дальнейших изменений, если тег является родительским узлом измененного объекта.

Подрывная деятельность также имеет дополнительные функции, начиная с версии 1.5, касаясь "отслеживания слияния ответвления" так, чтобы изменения согласились , ответвление может быть объединено назад в соединительную линию с поддержкой возрастающего, "умного" слияния.

899
ответ дан 31.01.2020, 08:02
  • 1
    Беспорядок с тегами и ответвлениями состоит в том, что в svn действительно нет никакого различия между ними помимо названия каталога. В svn Вы в состоянии передать изменения в теге, и на самом деле трудно предотвратить это. Большинство других VCSes рассматривает теги как неизменные снимки (моменты времени). – Ken Liu 31.01.2020, 08:02
  • 2
    Tags каталог также часто используется в течение многих этапов, тестируя и проверки обычным пользователем. Это было бы хорошим местом для помещения прототипа также (просто некоторые идеи сверху моей головы). – Jeff Noel 31.01.2020, 08:03

В первую очередь, как @AndrewFinnell и @KenLiu указывают в SVN, сами имена каталогов ничего не означают - "соединительная линия, ответвления и теги" являются просто общим соглашением, которое используется большинством репозиториев. Не все проекты используют все каталоги (довольно распространено не использовать "теги" вообще), и на самом деле, ничто не мешает Вам назвать их чем-либо, что Вы хотели бы, хотя повреждение соглашения часто сбивает с толку.

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

  • Соединительная линия : основная область разработки. Это - то, где Ваша следующая главная версия жизней кода, и обычно имеет все новейшие функции.

  • Ответвления : Каждый раз, когда Вы выпускаете основную версию, это создало ответвление. Это позволяет Вам делать исправления ошибок и делать новый выпуск, не имея необходимость выпускать новейшее - возможно незаконченный или непротестированный - функции.

  • Теги : Каждый раз Вы выпускаете версию (финальная версия, предвыпускные версии (RC) и беты), Вы делаете тег для нее. Это дает Вам копию момента времени кода, как это было в том состоянии, позволяя Вам возвратиться и воспроизвести любые ошибки при необходимости в прошлой версии, или повторно выпустите прошлую версию точно, как это было. Ответвления и теги в SVN легки - на сервере, он не делает полную копию файлов, просто маркер, говоря, что "эти файлы были скопированы в этом пересмотре", который только поднимает несколько байтов. Принимая это во внимание, Вы никогда не должны быть обеспокоены созданием тега ни для какого выпущенного кода. Как я сказал ранее, теги часто опускаются и вместо этого, журнал изменений или другой документ разъясняют число пересмотра, когда выпуск сделан.

<час>

, Например, скажем, Вы запускаете новый проект. Вы начинаете работать в "соединительной линии", на том, что будет в конечном счете выпущено как соединительная линия версии 1.0.

  • / - версия разработки, скоро чтобы быть 1.0
  • , ответвления / - пустой

Однажды 1.0.0 закончены, Вы переходите соединительная линия в новое "1.0" ответвление и создаете "1.0.0" тег. Теперь работа над тем, что в конечном счете будет 1.1, продолжается в соединительной линии.

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

Вы сталкиваетесь с некоторыми ошибками в коде, и фиксируете их в соединительной линии, и затем объединяете меры с этими 1,0 ответвлениями. Можно также сделать противоположное, и исправить ошибки в этих 1,0 ответвлениях и затем объединить их назад для транкинга, но обычно палка проектов со слиянием одностороннего только для уменьшения шанса пропавших без вести чего-то. Иногда ошибка может только быть исправлена в 1,0, потому что это является устаревшим в 1,1. Это действительно не имеет значения: Вы только хотите удостовериться, что Вы не делаете выпуска 1.1 с теми же ошибками, которые были исправлены в 1,0.

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

, Как только Вы находите достаточно ошибок (или возможно одну критическую ошибку), Вы решаете сделать 1.0.1 выпуска. Таким образом, Вы делаете тег "1.0.1" из этих 1,0 ответвлений и выпускаете код. На данном этапе соединительная линия будет содержать то, что будет 1.1, и эти "1.0", ответвление содержит 1.0.1 кода. В следующий раз, когда Вы выпускаете обновление 1,0, это было бы 1.0.2.

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

В конечном счете Вы почти готовы к выпуску 1.1, но Вы хотите сделать бету сначала. В этом случае Вы, вероятно, делаете "1.1" ответвление, и "1.1beta1" тег. Теперь, работа над тем, что будет 1.2 (или 2.0, возможно) продолжается в соединительной линии, но работа над 1,1 продолжается в эти "1.1" ответвление.

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

версии выпуска tags/1.1beta1 - 1.1 Однажды Вы финал выпуска 1.1, Вы делаете "1.1" тег от эти "1.1" ответвление.

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

<час>

Другое использование ответвлений для функций. Это - то, где Вы переходите соединительная линия (или одно из Ваших ответвлений выпуска) и работа над новой возможностью в изоляции. Как только функция завершается, Вы объединяетесь, она въезжает задним ходом и удаляет ответвление.

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

идея этого состоит в том, когда Вы работаете над чем-то подрывным (который поддержал бы или вмешался бы в других людей от выполнения их работы), что-то экспериментальное (который даже не может сделать его в), или возможно просто что-то, что занимает много времени (и Вы боитесь, если это держащий 1,2 выпуска, когда Вы готовы перейти 1.2 от соединительной линии), можно сделать это в изоляции в ответвлении. Обычно Вы совершенствуете его соединительной линии путем слияния изменений во все это время, которое облегчает повторно интегрировать (слияние назад для транкинга), когда Вы закончены.

<час>

Также примечание, схема управления версиями, которую я использовал здесь, является только одним из многих. Некоторые команды сделали бы исправление ошибки / корректировочные версии как 1,1, 1.2, и т.д., и существенные изменения как 1.x, 2.x, и т.д. Использование здесь является тем же, но можно назвать ответвление "1" или "1.x" вместо "1,0" или "1.0.x". (В стороне семантическое управление версиями является хорошим руководством по тому, как сделать номера версий).

552
ответ дан 31.01.2020, 07:58

соединительная линия является строкой разработки, которая содержит последний исходный код и функции. Это должно иметь последние исправления ошибок в нем, а также последние опции, добавленные к проекту.

ответвления обычно используются, чтобы сделать что-то далеко от соединительной линии (или другая строка разработки), который был бы иначе повреждение сборка. Новые возможности часто создаются в ответвлении и затем объединились назад в соединительную линию. Ответвления часто содержат код, которые не обязательно утверждены для строки разработки, от которой он перешел. Например, программист мог попробовать оптимизацию на чем-то в ответвлении и только объединиться назад в строке разработки, как только оптимизация является удовлетворительной.

теги являются снимками репозитория в определенное время. Никакая разработка не должна происходить на них. Они чаще всего используются, чтобы сделать копию того, что было выпущено клиенту так, чтобы у Вас мог легко быть доступ к тому, что использует клиент.

Вот ссылка на очень хорошее руководство по репозиториям:

статьи в Википедии также стоит прочитать.

13
ответ дан 31.01.2020, 08:01
  • 1
    Нет ни один вообще. Я использую Firefox для работы в сети, Chrome только для тестов автоматизации. То всплывающее окно isn' t предупреждение это блокирует Ваш браузер. И погугленный для решений, но couldn' t находят что-либо его странным. I' m рабочий chromedriver 2.9 – elcharrua 16.04.2014, 05:38

Я не действительно уверен, каков 'тег', но ответвление является понятием управления довольно общим источником.

В основном, ответвление является способом работать над изменениями в коде, не влияя на соединительную линию. Скажите, что Вы хотите добавить новую опцию, это справедливо сложно. Вы хотите быть в состоянии зарегистрироваться в изменениях, как Вы делаете их, но не хотите, чтобы он влиял на соединительную линию, пока Вы не сделаны с функцией.

Первый Вы создали бы ответвление. Это - в основном копия соединительной линии по состоянию на время, Вы сделали ответвление. Вы тогда сделали бы всю свою работу в ответвлении. Любые изменения, внесенные в ответвлении, не влияют на соединительную линию, таким образом, соединительная линия все еще применима, позволяя другим продолжить работать там (как выполнение bugfixes или маленькие улучшения). Как только Ваша функция сделана, Вы интегрировали бы ответвление назад в соединительную линию. Это переместило бы все Ваши изменения от ответвления для транкинга.

существует много использования людей шаблонов для ответвлений. Если бы у Вас есть продукт с несколькими основными версиями, поддерживаемыми сразу, обычно каждая версия была бы ответвлением. Где я работаю, у нас есть ответвление QA и Производственное ответвление. Прежде, чем выпустить наш код к QA мы интегрируем изменения в ответвлении QA, затем развертываемся оттуда. При выпуске к производству мы интегрируемся от ответвления QA до Производственного ответвления, таким образом, мы знаем, что код, работающий в производстве, идентичен тому, что протестировал QA.

Вот статья в Википедии об ответвлениях , так как они, вероятно, объясняют вещи лучше, чем я могу.:)

5
ответ дан 31.01.2020, 08:02
  • 1
    спасибо на ответе, собирающемся пытаться делать сценарий на autoIt. – elcharrua 22.04.2014, 09:36

Я думаю, что часть беспорядка прибывает из различия между понятием тега и реализацией в SVN. К SVN тег является ответвлением, которое является копией. Изменение тегов считают неправильным, и на самом деле инструменты как TortoiseSVN предупредят Вас, при попытке изменить что-нибудь с../tags/.. в пути.

6
ответ дан 31.01.2020, 08:03
  • 1
    Спасибо работает отлично не решение, которое это хотело бы только единственное, которое работает, пока Google не фиксирует проблему Chrome – elcharrua 22.04.2014, 10:29

Тег = определенная часть вовремя, обычно используемый для выпусков

я думаю, что это - то, что каждый обычно подразумевает под "тегом". Но в Подрывной деятельности:

у Них действительно нет формального значения. Папка является папкой к SVN.

, который я нахожу довольно сбивающими с толку: система управления версиями, которая ничего не знает об ответвлениях или тегах. С точки зрения реализации я думаю Подрывная деятельность, способ создать "копии" очень умен, но меня имеющий необходимость знать об этом то, что я назвал бы текучая абстракция .

Или возможно я просто использовал CVS слишком долго.

8
ответ дан 31.01.2020, 08:03
  • 1
    Согласованный @elcharrua. Я попробовал много разных подходов для работы вокруг проблемы, и это - единственное до сих пор, которое работало. – Richard 22.04.2014, 10:34
  • 2
    Альтернативная перспектива - то, что противоположное верно, что наложение понятия наклеивает subversion' s объектная модель была бы текучая абстракция в противоположном направлении. Как I' m предположение Вы знаете, подрывная деятельность была реакцией на CVS, попыткой к " сделайте право " CVS; я couldn' t находят ссылку, но исходные разработчики подрывной деятельности сказали, что они вывели понятие тегов 100% сознательно, что различие между ответвлениями и тегами является просто вопросом политики. Если команды хотят наложить политику и соглашение сверху subversion' s объектная модель, пусть будет так. That' s точно, что мы имеем сегодня. – Darryl 31.01.2020, 08:04

Магистральный каталог является каталогом, с которым Вы являетесь, вероятно, самыми знакомыми, потому что это используется для содержания новых изменений. Ваша основная кодовая база должна быть в соединительной линии.

каталог ответвлений для содержания Ваших ответвлений, независимо от того, что они могут быть.

каталог тегов в основном для меток определенного набора файлов. Вы делаете это для вещей как выпуски, где Вы хотите "1.0" быть этими файлами в этих изменениях и "1.1", чтобы быть этими файлами в этих изменениях. Вы обычно не изменяете теги, как только они сделаны. Для получения дополнительной информации о тегах см. Глава 4. Ветвление и Слияние Управление версиями с Подрывной деятельностью ).

9
ответ дан 31.01.2020, 08:04

У них действительно нет формального значения. Папка является папкой к SVN. Они - общепринятый способ организовать Ваш проект.

  • соединительная линия - то, где Вы сохраняете свою основную строку разработки. Папка ответвления - то, где Вы могли бы создать, ну, в общем, ответвления, которые трудно объяснить в коротком сообщении.

  • ответвление А является копией подмножества Вашего проекта, что Вы продолжаете работать отдельно от соединительной линии. Возможно, это для экспериментов, которые не могли бы пойти никуда, или возможно это для следующего выпуска, который Вы позже объедините назад в соединительную линию, когда это станет стабильным.

  • И папка тегов для создания теговых копий Вашего репозитория, обычно в контрольных точках выпуска.

, Но как я сказал к SVN, папка является папкой. branch, trunk и тег просто соглашение.

я использую слово 'копия' подробно. SVN на самом деле не делает полные копии вещей в репозитории.

29
ответ дан 31.01.2020, 08:05
  • 1
    Это странно. Вы выполняете последнюю версию Chrome? – Mike B 16.04.2014, 05:40

В SVN тег и ответвление действительно подобны.

Тег = определенная часть вовремя, обычно используемый для выпусков

Ответвление = также определенная часть вовремя, что разработка может продвинуться, обычно используемый для основной версии как 1,0, 1.5, 2.0, и т.д., тогда когда Вы выпускаете Вас, отмечают ответвление. Это позволяет Вам продолжать поддерживать производственный выпуск при продвижении с повреждением изменений в соединительной линии

Соединительная линия = пространство технической разработки, это - то, где вся разработка должна произойти, и затем изменяется объединенный назад от выпусков ответвления.

38
ответ дан 31.01.2020, 08:05

В общем (представление агностика инструмента), ответвление является механизмом, используемым для параллельной разработки. SCM может иметь от 0 до ответвлений n. Подрывная деятельность имеет 0.

  • Соединительная линия является основным ответвлением , рекомендовал Подрывной деятельностью , но Вы никоим образом не вынуждены создать его. Вы могли назвать его 'основным' или 'выпуски' или не иметь один вообще!

  • Ответвление представляет усилие по разработке. Это никогда нельзя называть в честь ресурса (как 'vonc_branch'), но после:

    • цель 'myProject_dev' или 'myProject_Merge'
    • периметр выпуска 'myProjetc1.0_dev'or myProject2.3_Merge' или 'myProject6.. 2_Patch1'...
  • Тег является снимком файлов для легкого возвращения к тому состоянию. проблема состоит в том, что тег и ответвление являются тем же в Подрывной деятельности . И я определенно рекомендовал бы параноидальный подход:

    можно использовать один из сценариев управления доступом, которым предоставляют Подрывную деятельность, чтобы препятствовать тому, чтобы любой делал что-либо кроме создания новых копий в области тегов.

тег А является окончательным. Его содержание никогда не должно изменяться. НИКОГДА. Когда-либо. Вы забыли строку в информации о версии? Создайте новый тег. Устаревший или удаляют старый.

Теперь, я читал много о "слиянии назад такой и такой в такой и такие ответвления, тогда наконец в магистральном ответвлении". Это называют рабочий процесс слияния и существует ничто обязательное здесь . Именно, не потому что у Вас есть магистральное ответвление, необходимо объединиться назад что-либо.

Условно, магистральное ответвление может представить текущее состояние Вашей разработки, но это для простого последовательного проекта, который является проектом, который имеет:

  • не 'заранее' разработка (для подготовки следующей следующей версии, подразумевающей такие изменения, что они не совместимы с текущей 'магистральной' разработкой)
  • никакой крупный рефакторинг (для тестирования нового технического выбора)
  • никакое долгосрочное обслуживание предыдущего выпуска

, поскольку с одним (или все) тех сценарий, Вы вовлекаете себя четыре 'соединительных линии', четыре 'текущих разработки', и не все, которое Вы делаете в тех, параллельны разработке, должен будет обязательно быть объединен назад в 'соединительной линии'.

75
ответ дан 31.01.2020, 08:06

В дополнение к тому, что сказал Nick, можно узнать больше в Переданные потоком Строки: Переходящие Шаблоны для Параллельной Разработки программного обеспечения

enter image description here

В этом рисунке main являются соединительной линией, rel1-maint ответвление, и 1.0 тег.

96
ответ дан 31.01.2020, 08:06

Теги

Похожие вопросы