Я багато разів бачив ці слова навколо обговорень Subversion (і, мабуть, загального сховища).
Я використовую SVN для своїх проектів протягом останніх декількох років, але ніколи не зрозумів повну концепцію цих каталогів.
Що вони означають?
Я багато разів бачив ці слова навколо обговорень Subversion (і, мабуть, загального сховища).
Я використовую SVN для своїх проектів протягом останніх декількох років, але ніколи не зрозумів повну концепцію цих каталогів.
Що вони означають?
Відповіді:
Хм, не впевнений, що я згоден з тим, що тег Ніка повторюється як гілка. Тег - це лише маркер
Багажник був би основним органом розвитку, починаючи від початку проекту до сьогодення.
Відділення - це копія коду, отриманого з певної точки стовбура, яка використовується для застосування основних змін до коду при збереженні цілісності коду в магістралі. Якщо основні зміни працюють за планом, вони зазвичай зливаються назад у магістраль.
Тег буде моментом часу на стовбурі або гілці, який ви хочете зберегти. Дві основні причини збереження полягають у тому, що або це основний випуск програмного забезпечення, будь то альфа, бета, RC або RTM, або це найбільш стабільна точка програмного забезпечення до того, як були застосовані основні зміни на магістралі.
У проектах з відкритим кодом основні гілки, які не приймаються в багажник зацікавленими сторонами проекту, можуть стати основою для вилок - наприклад, абсолютно окремі проекти, що мають спільне походження з іншим вихідним кодом.
Підтрубки гілки та тегів відрізняються від стовбура такими способами:
Subversion дозволяє sysadmins створювати сценарії гаків, які запускаються для виконання, коли відбуваються певні події; наприклад, внесення змін у сховище. Для типової реалізації сховища Subversion дуже часто трактувати будь-який шлях, що містить "/ tag /", захищений від запису після створення; Чистий результат полягає в тому, що теги, щойно створені, незмінні (принаймні "звичайним" користувачам). Це робиться за допомогою скриптів гака, які забезпечують незмінність, запобігаючи подальшим змінам, якщо тег є батьківським вузлом зміненого об'єкта.
Subversion також має додаткові можливості, оскільки версія 1.5 стосується "відстеження злиття гілок", щоб зміни, здійснені до гілки, могли бути об'єднані назад у магістраль із підтримкою інкрементального, "розумного" злиття.
Tags
Каталог також часто використовується для тестування етапів і перевірки звичайним користувачем. Це було б хорошим місцем, щоб поставити прототип теж (лише кілька ідей на мою голову).
Перш за все, як зазначають @AndrewFinnell та @KenLiu, у SVN імена каталогів самі по собі нічого не означають - "стовбур, гілки та теги" - це просто звичайна умова, яка використовується більшістю сховищ. Не всі проекти використовують усі каталоги (досить часто взагалі не використовувати «теги»), і насправді ніщо не заважає вам називати їх усім, що вам хотілося б, хоча порушення конвенції часто бентежить.
Я опишу, мабуть, найпоширеніший сценарій використання гілок і тегів, і наведу приклад сценарію того, як вони використовуються.
Багажник : Основна зона розвитку. Тут проживає ваш наступний головний випуск коду і, як правило, є всі новітні функції.
Гілки : Щоразу, коли випускаєте основну версію, вона створюється гілкою. Це дозволяє робити виправлення помилок та робити новий реліз, не випускаючи нові - можливо незавершені чи неперевірені - функції.
Теги : Щоразу, коли випускаєте версію (остаточний реліз, випуск кандидатів (RC) та бета-версії), ви робите тег для неї. Це дає точну копію коду, як він був у тому стані, що дозволяє вам повернутися назад і відтворити будь-які помилки, якщо це необхідно, в минулій версії, або повторно випустити попередню версію саме такою, якою вона була. Гілки та теги в SVN легкі - на сервері він не робить повну копію файлів, лише маркер, який говорить "ці файли були скопійовані під час цього перегляду", який займає лише кілька байт. Зважаючи на це, ви ніколи не повинні турбуватися про теги для будь-якого випущеного коду. Як я вже говорив раніше, теги часто опускаються, і замість цього, журнал змін або інший документ уточнює номер версії, коли робиться випуск.
Наприклад, скажімо, ви починаєте новий проект. Ви починаєте працювати в "магістралі", над тим, що з часом вийде у версії 1.0.
Після завершення 1.0.0 ви розгалужуєте стовбур нової гілки "1.0" та створюєте тег "1.0.0". Тепер робота над тим, що в підсумку буде 1,1, продовжується в магістралі.
Ви натрапляєте на деякі помилки в коді та виправляєте їх у магістралі, а потім об'єднуєте виправлення у відділення 1.0. Ви також можете зробити навпаки, і виправити помилки у відділенні 1.0, а потім об'єднати їх назад до стовбура, але зазвичай проекти дотримуються злиття в один бік, щоб зменшити шанс чогось пропустити. Іноді помилку можна виправити лише у 1,0, оскільки вона є застарілою у 1.1. Це насправді не має значення: ви хочете лише переконатися, що ви не випустите 1.1 з тими ж помилками, які були виправлені в 1.0.
Виявивши достатню кількість помилок (або, можливо, одну критичну помилку), ви вирішите зробити випуск 1.0.1. Отже, ви робите тег "1.0.1" з відділення 1.0 і випускаєте код. У цей момент магістраль буде містити те, що буде 1,1, а гілка "1,0" містить код 1,0.1. Наступного разу, коли ви випустите оновлення до версії 1.0, це буде 1.0.2.
Зрештою ви майже готові випустити 1.1, але спочатку хочете зробити бета-версію. У цьому випадку ви, ймовірно, зробите гілку "1.1" та тег "1.1beta1". Тепер робота над рівнем 1,2 (або, можливо, 2,0) продовжується в магістралі, але робота над 1.1 триває в гілці "1.1".
Після випуску 1.1 фіналу ви робите тег "1.1" з гілки "1.1".
Ви також можете продовжувати підтримувати 1,0, якщо хочете, переносячи виправлення помилок між усіма трьома гілками (1.0, 1.1 та стовбуром). Важливим рішенням є те, що для кожної основної версії програмного забезпечення, яке ви підтримуєте, у вас є відділення, яке містить останню версію коду для цієї версії.
Ще одне використання гілок - для функцій. Тут ви здійснюєте відділення магістралі (або одного з відділень випуску) та працюєте над новою функцією ізольовано. Після завершення функції ви об’єднуєте її назад і виймаєте гілку.
Ідея цього полягає в тому, коли ви працюєте над чимось руйнівним фактором (яке б стримувало чи заважало іншим людям виконувати свою роботу), щось експериментальне (що може навіть не встигнути) або, можливо, просто щось, що потребує тривалого часу (і ви боїтесь, якщо він містить 1.2 випуску, коли ви готові відгалужувати 1.2 від магістралі), ви можете це зробити ізольовано у гілці. Як правило, ви постійно оновлюєте його магістраллю, постійно об'єднуючи зміни, що полегшує повторну інтеграцію (злиття назад до магістралі), коли ви закінчите.
Також зауважте, що використана тут схема версій - лише одна з багатьох. Деякі команди виконують виправлення помилок / випуски технічного обслуговування як 1.1, 1.2 та ін., А також значні зміни, як 1.x, 2.x, тощо. Використання тут те саме, але ви можете назвати гілку "1" або "1 .x "замість" 1.0 "або" 1.0.x ". (Окрім того, семантична версія є хорошим посібником щодо того, як робити номери версій).
Окрім сказаного Ніком, ви можете дізнатися більше на Streamed Lines: Розгалуження моделей для паралельної розробки програмного забезпечення
На цій фігурі main
стовбур, rel1-maint
є гілка і 1.0
є тегом.
Загалом (інструментальний агностичний погляд) гілка - це механізм, який використовується для паралельного розвитку. SCM може мати від 0 до n відділень. Субверсія має 0.
Магістраль - це головна галузь, яку рекомендує Subversion , але ви її жодним чином не змушені створювати. Ви можете назвати це "головним" або "випуском", або його взагалі немає!
Відділення являє собою зусилля з розвитку. Він ніколи не повинен бути названий на ресурс (наприклад, 'vonc_branch'), але після:
Тег - це знімок файлів, щоб легко повернутися до цього стану. Проблема в тому, що тег і гілка однакові в Subversion . І я б точно рекомендував параноїдальний підхід:
ви можете використовувати один із скриптів контролю доступу, наданий Subversion, щоб не допустити будь-кого робити щось, крім створення нових копій в області тегів.
Тег остаточний. Його зміст ніколи не повинен змінюватися. НІКОЛИ. Колись. Ви забули рядок у примітці до випуску? Створіть новий тег. Застаріле або видаліть старе.
Зараз я багато читав про "злиття таких і таких у таких і таких гілках, потім нарешті в стовбуровій гілці". Це називається об'єднати робочий процес, і тут немає нічого обов'язкового . Це не тому, що у вас є гілка стовбура, ви повинні злити назад все.
За умовою, гілка магістралі може представляти поточний стан вашого розвитку, але це для простого послідовного проекту, тобто проекту, який має:
Тому що за допомогою одного (або всього) цього сценарію ви отримуєте собі чотири "стволи", чотири "поточні розробки", і не все, що ви робите в цих паралельних розробках, обов'язково доведеться об'єднати назад у "багажник".
У SVN тег та гілка дійсно схожі.
Тег = визначений фрагмент за часом, який зазвичай використовується для випусків
Відділення = також визначений фрагмент у часі, який може продовжувати розвиток, зазвичай використовується для основних версій, таких як 1.0, 1.5, 2.0 і т.д. Це дозволяє продовжувати підтримувати виробничий випуск, рухаючись вперед із порушеннями змін у магістралі
Trunk = робочий простір для розробки, саме тут має відбуватися вся розробка, а потім зміни, об'єднані назад з гілками випусків.
Вони насправді не мають жодного формального значення. Папка - це папка для SVN. Вони є загальноприйнятим способом організації вашого проекту.
Стовбур - це місце, де ви тримаєте свою основну лінію розвитку. Папка гілок - це те, де ви можете створити гілки, які важко пояснити за короткий пост.
Гілка - це копія підмножини вашого проекту, над якою ви працюєте окремо від магістралі. Можливо, це для експериментів, які нікуди не підуть, або, можливо, це для наступного випуску, який ви згодом злинете назад у магістраль, коли він стане стабільним.
І папка з тегами призначена для створення тегових копій вашого сховища, як правило, на контрольних точках випуску.
Але, як я вже сказав, у SVN папка - це папка. branch
, trunk
а тег - лише умова.
Я вживаю слово "копіювати" вільно. SVN насправді не робить повних копій речей у сховищі.
Стовбур є лінія розвитку , яка містить останню версію вихідного коду і функції. У ньому повинні бути найновіші виправлення помилок, а також останні функції, додані до проекту.
Ці гілки зазвичай використовуються , щоб зробити що - то від стовбура (або іншої лінії розвитку) , які могли б порушити збірку. Нові функції часто вбудовуються у гілку, а потім зливаються назад у стовбур. Гілки часто містять код, який не обов'язково затверджується для лінії розробки, на яку він розгалужений. Наприклад, програміст може спробувати оптимізувати щось у гілці та об'єднатись лише в лінію розробки, коли оптимізація задовільна.
Ці теги моментальні знімки сховища в певний момент часу. Ніяких розробок щодо цього не повинно відбуватися. Вони найчастіше використовуються для отримання копії того, що було випущено клієнту, щоб ви могли легко отримати доступ до того, чим користується клієнт.
Ось посилання на дуже хороший посібник із сховищ:
Статті у Вікіпедії також варто прочитати.
Тепер справа в розробці програмного забезпечення, немає нічого послідовного знання про що-небудь, схоже, у кожного це є по-своєму, але це тому, що це все одно порівняно молода дисципліна.
Ось мій простий спосіб,
trunk - Каталог магістралей містить найновіший, затверджений і об'єднаний корпус роботи. Всупереч тому, що багато хто зізнався, мій багажник призначений лише для чистої, акуратної, затвердженої роботи, а не для розвитку, а скоріше для зони випуску.
У якийсь момент часу, коли магістраль видається всім готовим до випуску, він помічається та відпускається.
відділення - Каталог гілок містить експерименти та поточну роботу. Робота під гілкою залишається там, поки не буде затверджено об'єднання в багажник. Для мене це сфера, де виконується вся робота.
Наприклад: я можу мати гілку ітерації-5 для п’ятого раунду розробки на продукті, можливо, гілку прототипу-9 для дев'ятого раунду експериментів тощо.
теги - Каталог тегів містить знімки затверджених гілок та випуски стовбурів. Щоразу, коли галузь затверджена для злиття в стовбур або випуск її зроблений, робиться знімок затвердженої гілки або випуску стовбура під тегами.
Я гадаю, що за допомогою тегів я можу стрибати туди-сюди, щоб досить просто вказувати на інтерес.
Я знайшов великий підручник про SVN , коли я дивилася на веб - сайті автора в OpenCV 2 комп'ютерного зору прикладного програмування Cookbook , і я думав , що я повинен поділитися.
У нього є підручник про те, як використовувати SVN та що означають фрази "стовбур", "тег" та "гілка".
Цитується безпосередньо з його підручника:
Поточна версія вашого програмного проекту, над якою зараз працює ваша команда, зазвичай знаходиться під каталогом, який називається trunk . По мірі розвитку проекту розробник оновлює цю версію, виправляє помилки, додає нові функції) та надсилає його зміни під цей каталог.
У будь-який момент часу, можливо, ви захочете заморозити версію та зробити знімок програмного забезпечення, як це є на даному етапі розробки. Зазвичай це відповідає офіційним версіям вашого програмного забезпечення, наприклад, тим, які ви доставите своїм клієнтам. Ці знімки розміщені в каталозі тегів вашого проекту.
Нарешті, часто корисно створити в якийсь момент нову лінію розробки для свого програмного забезпечення. Це відбувається, наприклад, коли ви хочете перевірити альтернативну реалізацію, в якій вам доведеться модифікувати програмне забезпечення, але ви не хочете подавати ці зміни до основного проекту, поки ви не вирішите, чи приймете ви нове рішення. Потім основна команда може продовжувати працювати над проектом, тоді як інші розробники працюють над прототипом. Ви б поклали ці нові лінії розвитку проекту під каталог, який називається гілками .
Каталог магістралей - це каталог, який ви, мабуть, найбільше знайомий, оскільки він використовується для проведення останніх змін. Ваша основна база даних повинна бути в магістралі.
Каталог гілок призначений для зберігання ваших гілок, якими б вони не були.
Каталог тегів - це в основному для тегування певного набору файлів. Ви робите це для речей, як релізи, де ви хочете, щоб "1.0" були цими файлами в цих редакціях, а "1.1" були цими файлами при цих версіях. Зазвичай теги не змінюються після їх створення. Для отримання додаткової інформації про теги, див. Розділ 4. Розгалуження та об'єднання (у розділі " Управління версіями з підривом" )
Однією з причин, чому кожен має дещо інше визначення, є те, що Subversion реалізує нульову підтримку гілок та тегів. Subversion в основному говорить: Ми переглянули повнофункціональні гілки та теги в інших системах і не вважали їх корисними, тому ми нічого не реалізували. Просто зробіть копію в новий каталог з ім'ям конвенції замість . Тоді, звичайно, кожен вільний мати трохи різні умовності. Щоб зрозуміти різницю між реальним тегом та простою копією + умовами іменування, див. Теги та гілки Subversion у Вікіпедії .
Тег = визначений фрагмент за часом, який зазвичай використовується для випусків
Я думаю, що це зазвичай означає "тег". Але в Subversion:
Вони насправді не мають жодного формального значення. Папка - це папка для SVN.
що я вважаю досить заплутаним: система контролю ревізії, яка нічого не знає про гілки або теги. З точки зору реалізації, я вважаю, що підривний спосіб створення "копій" є дуже розумним, але мені потрібно знати про це те, що я би назвав хиткою абстракцією .
А може, я просто занадто довго використовував CVS .
Я думаю, що деяка плутанина походить від різниці між концепцією тегу та реалізацією в SVN. Для SVN тег - це гілка, яка є копією. Змінення тегів вважається неправильним, і насправді такі інструменти, як TortoiseSVN, попередить вас, якщо ви намагатиметесь щось змінити за допомогою ../tags/ .. на шляху.
Я не дуже впевнений, що таке "тег", але гілка є досить поширеною концепцією управління джерелами.
В основному, гілка - це спосіб працювати над змінами коду, не впливаючи на стовбур. Скажіть, ви хочете додати нову функцію, яка є досить складною. Ви хочете мати можливість перевіряти зміни під час їх внесення, але не хочете, щоб вони впливали на магістраль, поки ви не закінчите функцію.
Спочатку ви створите філію. Це в основному копія стовбура часу, коли ви робили гілку. Потім ви зробите всю свою роботу у філії. Будь-які зміни, зроблені у гілці, не впливають на магістраль, тому магістраль все ще є корисною, що дозволяє іншим продовжувати працювати там (наприклад, робити помилки чи невеликі вдосконалення). Як тільки ваша функція буде виконана, ви інтегруєте гілку назад у стовбур. Це перемістить усі ваші зміни від гілки до стовбура.
Існує ряд моделей, які люди використовують для гілок. Якщо у вас є продукт, який підтримується відразу декількома основними версіями, зазвичай кожна версія буде галуззю. Де я працюю, у нас є філія якості та виробнича філія. Перш ніж випустити наш код до QA, ми інтегруємо зміни до гілки QA, а потім розгорнемо звідти. Випускаючи виробництво, ми інтегруємось із гілки якості до галузі виробництва, тому ми знаємо, що код, що працює у виробництві, ідентичний тому, який перевіряв QA.
Ось запис у Вікіпедії про гілки , оскільки вони, ймовірно, пояснюють речі краще, ніж я можу. :)
Багажник : Після завершення кожного спринту в спритності ми виходимо з частково поставляється продуктом. Ці випуски зберігаються в багажнику.
Відділення : Всі коди паралельних розробок для кожного спринту, що триває, зберігаються у відділеннях.
Теги : Щоразу, коли ми випускаємо бета-версію продукту, що частково постачається, ми робимо тег для цього. Це дає нам код, який був доступний в той момент часу, що дозволяє нам повернутися до цього стану, якщо це потрібно в якийсь момент під час розробки.
Для людей, знайомих з GIT, майстер в GIT рівносильний стволу в SVN.
Гілка та тег мають однакову термінологію як у GIT, так і у SVN.