Использование Mercurial для разделения частной и общедоступной версий

StackOverflow https://stackoverflow.com/questions/602202

  •  03-07-2019
  •  | 
  •  

Вопрос

Как бы вы использовали Mercurial для решения следующей проблемы?

Предположим, у меня есть библиотечное ядро.Теперь я хочу разработать расширение к этой библиотеке под названием Extension.Я хочу сохранить Ядро физически отделенным от Расширения, т.е.допустим, Core - это библиотека с открытым исходным кодом, а Extension - частная библиотека, основанная на Core (возможно, она содержит какие-то материалы, которые я хочу сохранить личными.Неважно.) .Очевидно, что я никогда не хочу загружать весь исходный код в расширении в общедоступный репозиторий.Но, с другой стороны, я мог бы захотеть перенести определенные изменения из расширения в Ядро (если бы я решил "пожертвовать" часть расширения Ядру) или наоборот (скажем, если я хочу включить исправления ошибок).

Как бы вы поступили по этому поводу, минимизируя риск утечки расширения в ядро (как только история будет передана на общедоступный сервер, пути назад не будет!), сохраняя при этом гибкость, позволяющую делать это для определенных изменений.Ветви?Клоны?Mqs?Что-то еще?

В настоящее время я знаком только с клонированием репозиториев, и мне очень нравится его простота.

Редактировать: Я придумал эту схему, но я не могу заставить ее работать под Windows.Два репозитория (Ядро и Расширение).В расширении есть два ветви, а также Ядро и расширение.Теперь вы можете зарегистрировать для каждого репозитория перехват в Mercurial, поэтому я хотел бы зарегистрировать перехват 'pretxnchangegroup' в основном репозитории, который запрещает проверки из ветви расширения, как вроде как объяснено в книге переменчивости.За исключением того, что я не совсем понимаю, как это работает под Windows.Итак:

  • у кого-нибудь есть пример чего-то подобного (фактически, любого хука, который изменяет результат транзакции) под Windows?
  • Я бы все еще мог использовать transplant для внесения изменений в cherrypick из расширения в основную ветвь, верно?
Это было полезно?

Решение

После некоторого тестирования я собираюсь опробовать эту схему.Два основных репозитория и две именованные ветви, Core и Extension.

Один основной репозиторий ядра, который должен содержать только основные наборы изменений и исходный код.Таким образом, он должен содержать только наборы изменений из основной ветви.Это проверяется с помощью следующего перехвата репозитория в hgrc этого репозитория:

pretxnchangegroup.branch = hg heads --template "current branches: {branches} " | find "Extension" && exit 1 || exit 0

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

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

надеюсь, это поможет кому-то еще.

Другие советы

(как только история будет перенесена, пути назад уже не будет !)

конечно, есть...вот что такое контроль версий!

Я не делал ничего подобного раньше, но это звучит так, словно пересадка команда будет полезна.Кроме того, у вас могут быть клоны клонов и переходить к любому из них и так далее.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top