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

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

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

3 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам