Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Что означают "branch", "tag" и "trunk" в репозиториях Subversion?
Я много раз видел эти слова в дискуссиях о Subversion (и, наверное, об общем репозитории). Последние несколько лет я использую SVN для своих проектов, но никогда не понимал полной концепции этих каталогов.
Что они означают?
Хм, не уверен, что я согласен с тем, что Ник ре тег похож на ветку. Тег-это просто маркер
Магистраль будет основным органом развития, начиная с момента начала проекта и до настоящего времени.
Ветвь -это копия кода, полученная из определенной точки магистрали, которая используется для внесения существенных изменений в код при сохранении целостности кода в магистрали. Если основные изменения работают по плану, они обычно сливаются обратно в магистраль.
Тег будет точкой во времени на стволе или ветке, которую вы хотите сохранить. Две основные причины сохранения состояли бы в том, что либо это основной выпуск программного обеспечения, будь то альфа, бета, RC или RTM, либо это самая стабильная точка программного обеспечения до того, как были применены основные изменения на магистрали.
В проектах с открытым исходным кодом основные ветви, которые не принимаются в магистраль заинтересованными сторонами проекта, могут стать основой для форков - Например, полностью отдельные проекты, которые имеют общий источник с другим исходным кодом.
Ветви и поддеревья тегов отличаются от ствола следующими способами:
Subversion позволяет системным администраторам создавать Хук-скрипты , которые запускаются для выполнения при наступлении определенных событий, например, при внесении изменений в репозиторий. Очень часто в типичной реализации репозитория Subversion любой путь, содержащий "/tag/", обрабатывается как защищенный от записи после создания; в итоге теги, однажды созданные, остаются неизменными (по крайней мере, для пользователей "ordinary"). Это делается с помощью Хук-скриптов, которые обеспечивают неизменяемость, предотвращая дальнейшие изменения, если тег является родительским узлом измененного объекта.
Subversion также добавила функции, начиная с версии 1.5, относящиеся к "branch merge tracking", так что изменения, зафиксированные в ветке , могут быть объединены обратно в магистраль с поддержкой инкрементного слияния "smart".
Прежде всего, как указывают @AndrewFinnell и @KenLiu, в SVN сами имена каталогов ничего не значат-"trunk, branches and tags"-это просто общее соглашение, которое используется большинством репозиториев. Не все проекты используют все каталоги (вполне разумно вообще не использовать "tags"), и на самом деле ничто не мешает вам называть их как угодно, хотя нарушение соглашения часто сбивает с толку.
Я опишу, вероятно, самый распространенный сценарий использования ветвей и тегов и приведу пример сценария их использования.
Магистраль: основная зона застройки. Именно здесь живет ваш следующий крупный релиз кода, и в целом он имеет все самые новые функции.
Ветви: каждый раз, когда вы выпускаете основную версию, она получает созданную ветвь. Это позволяет вам исправлять ошибки и делать новый релиз без необходимости выпускать самые новые - возможно, незаконченные или непроверенные - функции.
Теги: каждый раз, когда вы выпускаете версию (final release, release candidates (RC) и betas), вы делаете для нее тег. Это дает вам point-in-time копию кода, как это было в том состоянии, что позволяет вам вернуться и воспроизвести любые ошибки, если это необходимо в прошлой версии, или повторно выпустить прошлую версию точно так же, как это было. Ветви и теги в SVN являются легковесными - на сервере он не делает полную копию файлов, просто маркер говорит "these files were copied at this revision", что занимает всего несколько байт. Имея это в виду, вы никогда не должны беспокоиться о создании тега для любого выпущенного кода. Как я уже говорил ранее, теги часто опущены, и вместо этого журнал изменений или другой документ уточняет номер редакции при выпуске.
Например, предположим, вы начинаете новый проект. Вы начинаете работать в "trunk", над тем, что в конечном итоге будет выпущено как версия 1.0.
- trunk/-версия разработки, скоро будет 1.0
- branches/-пусто
Как только 1.0.0 будет закончен, вы разветвляете ствол на новую ветвь " 1.0 "и создаете тег" 1.0.0". Сейчас работа над тем, что в итоге будет 1.1, продолжается в магистрали.
- trunk/-версия для разработки, скоро будет 1.1
- branches/1.0 - 1.0.0 версия выпуска
- Версия выпуска tags/1.0.0 - 1.0.0
Вы сталкиваетесь с некоторыми ошибками в коде и исправляете их в транке, а затем объединяете исправления в ветку 1.0. Вы также можете сделать обратное и исправить ошибки в ветке 1.0, а затем объединить их обратно в магистраль, но обычно проекты придерживаются слияния в один конец только для того, чтобы уменьшить вероятность пропустить что-то. Иногда ошибка может быть исправлена только в 1.0, потому что она устарела в 1.1. На самом деле это не имеет значения: вы только хотите убедиться, что вы не выпускаете 1.1 с теми же ошибками, которые были исправлены в 1.0.
- trunk/-версия для разработки, скоро будет 1.1
- branches/1.0- предстоящий релиз 1.0.1
- Версия выпуска tags/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.
- trunk/-версия разработки, скоро будет 1.1
- branches/1.0- предстоящий выпуск 1.0.2
- tags/1.0.0 - 1.0.0 версия выпуска
- tags/1.0.1 - 1.0.1 версия выпуска
В конце концов, вы почти готовы выпустить 1.1, но сначала хотите сделать бета-версию. В этом случае вы, скорее всего, сделаете ветку "1.1" и тег "1.1beta1". Теперь работа над тем, что будет 1.2 (или 2.0 может быть), продолжается в транке, но работа над 1.1 продолжается в ветке "1.1".
- trunk/-версия разработки, скоро будет 1.2
- branches/1.0-предстоящий релиз 1.0.2
- branches/1.1-предстоящий релиз 1.1.0
- Версия выпуска tags/1.0.0 - 1.0.0
- tags/1.0.1 - 1.0.1 версия выпуска
- tags/1.1beta1 - бета 1.1 1 версия
Как только вы выпускаете 1.1 final, вы делаете тег " 1.1 "из ветви" 1.1".
Вы также можете продолжать поддерживать 1.0, если хотите, перенося исправления ошибок между всеми тремя ветвями (1.0, 1.1 и trunk). Важным выводом является то, что для каждой основной версии программного обеспечения, которое вы поддерживаете, у вас есть ветвь, содержащая последнюю версию кода для этой версии.
Другое использование ветвей - для функций. Это место, где вы разветвляете магистраль (или одну из ваших ветвей выпуска) и работаете над новой функцией в изоляции. Как только функция будет завершена, вы снова объедините ее и удалите ветвь.
- trunk/-версия для разработки, скоро будет 1.2
- branches/1.1-предстоящий релиз 1.1.0
- branches/ui-rewrite-экспериментальная ветвь признаков
Идея этого заключается в том, что когда вы работаете над чем-то разрушительным (что задержит или помешает другим людям делать свою работу), что-то экспериментальное (что может даже не войти) или, возможно, просто что-то, что занимает много времени (и вы боитесь, что это задержит выпуск 1.2, когда вы будете готовы к ответвлению 1.2 от ствола), вы можете сделать это изолированно в ветке. Как правило, вы поддерживаете его в актуальном состоянии с помощью trunk, постоянно внося в него изменения, что облегчает повторную интеграцию (слияние обратно в trunk), когда вы закончите.
Также обратите внимание, что схема управления версиями, которую я использовал здесь, является лишь одной из многих. Некоторые команды будут делать исправления ошибок/релизы обслуживания как 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 ветвей. Subversion имеет 0.
Trunk -это основная ветвь, рекомендуемая Subversion
В SVN тег и ветка действительно похожи.
Tag = определенный отрезок времени, обычно используемый для релизов
Ветвь = также определенный отрезок времени, на котором может продолжаться разработка, обычно используемый для основных версий, таких как 1.0, 1.5, 2.0 и т. д., а затем, когда вы выпускаете ветвь, вы помечаете ее. Это позволяет вам продолжать поддерживать производственный релиз, продвигаясь вперед с критическими изменениями в магистрали
Транк = рабочее пространство разработки, именно здесь должна происходить вся разработка,а затем изменения сливаются обратно из выпусков ветвей.
На самом деле они не имеют никакого формального значения. Папка есть папка до SVN. Они являются общепринятым способом организации вашего проекта.
Ствол-это то место, где вы держите свою основную линию развития. Папка ветвей-это то место, где вы можете создать, ну, ветви, которые трудно объяснить в коротком посте.
Ветвь-это копия подмножества вашего проекта, над которым вы работаете отдельно от магистрали. Может быть, это для экспериментов, которые могут никуда не пойти, или, может быть, это для следующего выпуска, который вы позже сольете обратно в багажник, когда он станет стабильным.
А папка tags предназначена для создания помеченных копий вашего репозитория, как правило, на контрольных точках выпуска.
Но, как я уже сказал, для SVN папка - это папка. branch , trunk и tag - это просто условность.
Я использую слово 'copy' свободно. SVN на самом деле не делает полных копий вещей в хранилище.
Магистраль- это линия разработки, которая содержит последний исходный код и функции. Он должен иметь последние исправления ошибок в нем, а также последние функции, добавленные в проект.
Ветви обычно используются для того, чтобы сделать что-то вдали от ствола (или другой линии развития), что в противном случае нарушило бы построение. Новые функции часто строятся в ветке, а затем сливаются обратно в ствол. Ветви часто содержат код, который не обязательно одобрен для линии разработки, от которой он разветвлялся. Например, программист может попробовать оптимизировать что-то в ветке и только после того, как оптимизация будет удовлетворительной, слиться обратно в линию разработки.
Теги представляют собой моментальные снимки хранилища в определенный момент времени. На них не должно происходить никакого развития. Они чаще всего используются для получения копии того, что было выпущено клиенту, чтобы вы могли легко получить доступ к тому, что клиент использует.
Вот ссылка на очень хорошее руководство по репозиториям:
Статьи в Википедии также стоит прочитать.
Вот в чем дело с разработкой программного обеспечения, нет никаких последовательных знаний ни о чем, каждый, кажется, имеет свой собственный путь, но это потому, что это относительно молодая дисциплина в любом случае.
Вот мой простой простой способ,
магистраль -каталог магистралей содержит наиболее актуальные, утвержденные и Объединенные рабочие группы. Вопреки тому, что многие признавали, мой багажник предназначен только для чистой, аккуратной, одобренной работы, а не для зоны разработки, а скорее для зоны выпуска.
В какой-то момент времени, когда ствол кажется полностью готовым к освобождению, он помечается и освобождается.
ветви -каталог ветвей содержит эксперименты и текущую работу. Работа под ветвью остается там до тех пор, пока не будет одобрено слияние в ствол. Для меня это та область, где вся работа делается.
Например: у меня может быть ветвь итерации-5 для пятого раунда разработки продукта, возможно, ветвь прототипа-9 для девятого раунда экспериментов и так далее.
теги -каталог тегов содержит моментальные снимки утвержденных ветвей и выпусков магистралей. Всякий раз, когда ветвь утверждается для слияния в магистраль или выпускается из магистрали, снимок утвержденной ветви или выпуска магистрали делается под тегами.
Я полагаю, что с помощью тегов я могу довольно легко прыгать назад и вперед во времени, чтобы получить интересующие меня точки.
Я нашел этот замечательный учебник по SVN, когда искал веб-сайт автора кулинарной книги OpenCV 2 Computer Vision Application Programming, и я подумал, что должен поделиться.
У него есть учебник о том, как использовать SVN и что означают фразы 'trunk', 'tag' и 'branch'.
Цитируется непосредственно из его учебника:
Текущая версия вашего программного проекта, над которой в настоящее время работает ваша команда, обычно находится в каталоге под названием trunk . По мере развития проекта разработчик обновляет эту версию, исправляет ошибки, добавляет новые функции) и отправляет свои изменения в этот каталог.
В любой момент времени вы можете заморозить версию и сделать снимок программного обеспечения таким, каким оно является на данном этапе разработки. Это обычно соответствует официальным версиям вашего программного обеспечения, например, тем, которые вы будете доставлять своим клиентам. Эти снимки находятся в каталоге тегов вашего проекта.
Наконец, часто бывает полезно создать в какой-то момент новую линию разработки для вашего программного обеспечения. Это происходит, например, когда вы хотите протестировать альтернативную реализацию, в которой вам нужно изменить свое программное обеспечение, но вы не хотите передавать эти изменения в основной проект, пока не решите, следует ли вам принять новое решение. Затем основная команда может продолжить работу над проектом, в то время как другие разработчики работают над прототипом. Вы бы поместили эти новые линии развития проекта в каталог под названием ветви .
Одна из причин, почему у всех есть немного другое определение, заключается в том, что Subversion реализует нулевую поддержку ветвей и тегов. Subversion в основном говорит: Мы посмотрели полнофункциональные ветви и теги в других системах и не нашли их полезными, поэтому мы ничего не реализовали. Просто сделайте копию в новый каталог с условным названием вместо этого . Тогда, конечно, каждый волен иметь немного разные условности. Чтобы понять разницу между реальным тегом и простой копией + соглашение об именовании смотрите запись Википедии Subversion tags & ветки .
Магистральный каталог-это каталог, с которым вы, вероятно, наиболее знакомы, поскольку он используется для хранения самых последних изменений. Ваша основная кодовая база должна быть в транке.
Каталог ветвей предназначен для хранения ваших ветвей, какими бы они ни были.
Каталог тегов в основном предназначен для маркировки определенного набора файлов. Вы делаете это для таких вещей, как релизы, где вы хотите, чтобы "1.0" были этими файлами в этих ревизиях и "1.1" были этими файлами в этих ревизиях. Обычно вы не изменяете теги сразу после их создания. Дополнительные сведения о тегах см. В главе 4. Ветвление и слияние (в системе управления версиями с Subversion ).
Tag = определенный отрезок времени, обычно используемый для релизов
Tag = определенный отрезок времени, обычно используемый для релизов
Я думаю, что это то, что обычно подразумевается под "tag". Но в подрывной деятельности:
На самом деле они не имеют никакого формального значения. Папка - это папка для SVN.
что я нахожу довольно запутанным: система контроля версий, которая ничего не знает о ветвях или тегах. С точки зрения реализации, Я думаю, что Субверсионный способ создания "copies" очень умен, но то, что я должен знать об этом, я бы назвал дырявой абстракцией .
Или, возможно, я просто слишком долго использовал CVS .
Я думаю, что некоторая путаница возникает из-за разницы между концепцией тега и реализацией в SVN. To SVN тег-это ветвь, которая является копией. Изменение тегов считается неправильным, и на самом деле такие инструменты, как TortoiseSVN, предупредят вас, если вы попытаетесь изменить что-либо с помощью ../tags/.. в пути.
Я не совсем уверен, что такое 'tag', но ветвь-довольно распространенная концепция управления версиями.
В принципе, ветвь-это способ работать с изменениями в коде, не затрагивая магистраль. Скажем, вы хотите добавить новую функцию, которая довольно сложна. Вы хотите иметь возможность проверять изменения по мере их внесения, но не хотите, чтобы это повлияло на Транк, пока вы не закончите с этой функцией.
Сначала вы создадите филиал. Это в основном копия trunk as-of, когда вы сделали ветку. Тогда ты будешь делать всю свою работу в филиале. Любые изменения, внесенные в ветвь, не влияют на магистраль, поэтому магистраль все еще можно использовать, позволяя другим продолжать работать там (например, делать исправления ошибок или небольшие улучшения). Как только ваша функция будет выполнена, вы интегрируете ветвь обратно в ствол. Это переместит все ваши изменения с ветки на ствол.
Есть несколько моделей, которые люди используют для ветвей. Если у вас есть продукт с несколькими основными версиями, поддерживаемыми одновременно, обычно каждая версия будет ветвью. Там, где я работаю, у нас есть филиал QA и производственный филиал. Перед выпуском нашего кода в QA мы интегрируем изменения в ветку QA, а затем развертываем их оттуда. При выпуске в производство мы интегрируемся из ветви QA в производственную ветвь, поэтому мы знаем, что код, запущенный в производстве, идентичен тому, что тестировал QA.
Вот запись Википедии о ветвях, поскольку они, вероятно, объясняют вещи лучше, чем я могу. :)
Ствол : после завершения каждого спринта в agile мы выходим с частично отгружаемым продуктом. Эти релизы хранятся в багажнике.
Ветви : все коды параллельных разработок для каждого текущего спринта хранятся в ветвях.
Теги : каждый раз, когда мы выпускаем частично отгружаемый продукт типа бета-версии, мы делаем для него тег. Это дает нам код, который был доступен в тот момент времени, позволяя нам вернуться в это состояние, если это потребуется в какой-то момент разработки.