Можно ли привязать подрепозиторий Mercurial к конкретной версии (например, svn:externals)?

Я переношу набор проектов из Subversion в Mercurial. В настоящее время проекты используют svn:externals для переноса кода из одного в другой. Я следил за рекомендацией указывать внешние версии на конкретный номер версии и вручную обновлять их по мере необходимости (так что, когда я обновляюсь до предыдущей версии основного проекта, я также получаю предыдущую версию внешних).

Способ создания внешних репозиториев в Mercurial, по-видимому, заключается в подрепозиториях, но я не вижу способа привязать их к конкретной версии — похоже, что Hg всегда будет обновлять вложенные репозитории до последней версии всякий раз, когда я обновляю основной репозиторий. Это правильно? И есть ли способ обойти это?


person Jesse McGrew    schedule 06.07.2010    source источник
comment
Оказывается, я был неправ. Он не обновляется до последней версии, а обновляется до версии, указанной в файле .hgsubstate, который контролируется версией и автоматически обновляется при каждой фиксации. Так что на самом деле это проще, чем внешние SVN, поскольку ревизию не нужно повторно привязывать вручную; каждая ревизия основного репозитория автоматически связывается с соответствующими ревизиями вложенных репозиториев.   -  person Jesse McGrew    schedule 21.12.2010


Ответы (3)


В файле .hgsub вы можете использовать синтаксис http://[user[:pass]@]host[:port]/[path][#revision] (или local/filesystem/path[#revision]) (дополнительные примеры см. в разделе hg help urls), чтобы привязать подрепозиторий к определенной версии. Для этой строки ревизии вы даже можете использовать #branchname или #tagname, чтобы отслеживать кончик конкретной ветки (например, stable) или перемещаемый тег (например: release), чтобы вы получали новую версию только тогда, когда ветвь или тег на удаленном субрепо обновляются.

person Ry4an Brase    schedule 07.07.2010
comment
Оказывается, это не работает: Mercurial жалуется на неподдерживаемый компонент URL-адреса, если я добавляю какую-либо часть #revision в конец URL-адреса. - person Jesse McGrew; 21.12.2010

(скопировано из моего комментария выше)

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

person Jesse McGrew    schedule 21.07.2013

Кажется, что вложенные репозитории Mercurial всегда обновляются до последней подсказки удаленного репозитория.

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

person Borealid    schedule 06.07.2010