Управление выпуском Mercurial

Я использую меркурий для контроля источника. Я хочу иметь главную ветвь dev, а затем иметь точки со временем, которые совпадают с "v1.0" "v1.01" и "v2.0", так что в любое время я могу вытащить слово "v2.0" "и раздавить некоторые ошибки на нем. Я слышал, что некоторые люди говорят, что мне нужны теги, некоторые говорят, что мне нужны закладки, другие говорят, что мне нужны имена ветвей, а третьи говорят, что мне просто нужно поддерживать несколько клонированных репозиториев.

С моей точки зрения, множественные клонированные репозитории кажутся плохим выбором, потому что одна вещь, которая мне нравится в DVCS, заключается в том, что после того, как вы клонируете "репо", у вас есть вся прошлая история и можете полностью восстановить с ноутбука someones, если ваш центральный сервер сжигает. Если ваше репо разделено повсюду, я чувствую, что вы теряете это преимущество, если только вы не ожидаете, что люди будут клонировать 5 репозиториев и поддерживать их на своих компьютерах локально. Это касается меня, потому что большинство людей говорят, что это хороший способ сделать это, но он логически не имеет смысла для меня. (Я понимаю, что это не правильный способ делать резервные копии, но не иметь полного доступа к части репо, не возвращаясь на сервер, кажется мне странным)

Таким образом, способ сохранить все вместе должен быть либо тегами, либо названными ветвями, либо закладками. Однако я не могу отличить их. Люди склонны объяснять закладки как "похожие на теги, с некоторыми оговорками" и называемые ветвями как своего рода движущийся тэг, который, вероятно, лучше делать с клонами.

Мне очень нравится ветвление стиля git (одно репо, несколько ветвей от него), однако я не хочу прибегать к странным плагинам или хакам, чтобы он выглядел как git. Я хочу понять правильный меркурийный путь.

Бонус: как "мелкомасштабные" ветки вписываются в микс, т.е. вы хотите работать с небольшой функцией в своей ветке?

Ответ 1

Именованная ветка - в каждой фиксации, которую вы делаете, есть поле, для которого ветвь является фиксацией. Помимо этого нет никакой разницы между репо с именованной веткой и репо с несколькими головами. Когда вы объединяете именованные ветки, это похоже на регулярное слияние, а название ветки берется из вашей активной ветки. Это более чем вероятно, что вы хотите для долгосрочной ветки v1.x.

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

Тэги - Именование очень хорошо, если вам нужно точно знать, что было выпущено в версии 1.0

Я бы использовал ветки имен для разработки ветки 1.x, ветку 2.x и т.д. Затем используйте тег для обозначения того, что на самом деле вышло, поскольку версия 1.0, 1.1 будет выполняться на дереве 1.x, тогда релиз 1.1 быть тегом того, что было в нем. Я бы не сделал закладки частью потока, так как вы должны синхронизировать их вручную (примечание в новых версиях меркуриальных закладок можно синхронизировать удаленно, хотя оно все еще требует вмешательства пользователя.)

Ответ 2

Я никогда не понимал идею клонирования репозиториев как анонимных ветвей.

hg branch feature-name - это то, как я люблю кататься.

Ответ 3

DVCS, например Mercurial или Git, позволяет клонировать репо. Это не значит, что вы используете его для выполнения рабочего процесса управления выпуском.

То, что каждый имеет полное ртутное репо, является лишь побочным эффектом DVCS. Это означает, что существует избыточность, когда основной репозиторий является каким-то образом потерянным.

Вы можете работать с DVCS таким образом, чтобы у вас мог быть мастер-репозиторий, в котором вы могли бы накладывать изменения и извлекать изменения, как и VCS (subversion) клиент-сервер с дополнительным преимуществом, которое вы могли бы работать в автономном режиме.

Для вашего рабочего процесса управления выпуском вы все равно должны смотреть

  • закладки, теги и ветки.

Достаточно обсуждать SO по каждой из этих тем.

Ниже приведена краткая информация о ветвлении с клонами, закладками и названными ветвями.

Ответ 4

Я использую меркурий для контроля источника. Я хочу иметь главную ветвь dev, а затем иметь точки со временем, которые совпадают с "v1.0" "v1.01" и "v2.0", так что в любое время я могу вытащить слово "v2.0" "и раздавить некоторые ошибки на нем.

Я рекомендую вам пометить каждую версию выпуска.

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

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

Итак... пометьте каждую версию и ветвь "по запросу".

Ответ 5

Вам нужны теги для отметки выпусков v1.0, v1.01 и v2.0 и т.д. Для веткистой разработки (исправления ошибок, ветвей функций и т.д.) вы можете использовать закладки - они уже очень хорошо поддерживаются в совместном использовании (см. http://mercurial.aragost.com/kick-start/en/bookmarks/#sharing-bookmarks). Если вам нужно иметь долгоживущие ветки (т.е. Они будут в репо в обозримом будущем), используйте названные ветки. Они были бы хорошим выбором, например. для v1, v2,... ветвей развития.

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

См. также mercurial: смешайте имена ветвей и закладок для быстрого и графического ответа о том, как закладки и именованные ветки различаются.