Ответ 1
Использование названных ветвей, как вы описали, - прекрасный выбор (хотя не единственный выбор), но я все же предлагаю использовать несколько отдельных клонов в хорошо известных местах для облегчения этого процесса. Притворившись, что http://host/hg/
является hgweb (ранее hgwebdir) для вашей установки (хотя ssh://отлично работает, что угодно), у вас будет что-то вроде этого:
-
http://host/hg/vendor
-
http://host/hg/custom
Два отдельных репозитория, где поток данных от поставщика к пользовательскому, но не в другом направлении. Именованная ветвь default
будет единственной в vendor
, а в custom
у вас будут как default
, так и stable
.
Когда у вас появился новый код, отпечатанный у поставщика, вы распакуете его в рабочий каталог репозитория vendor
, а затем запустите:
hg addremove
hg commit -m 'new drop from vendor, version number x.x.x'
Ваша история в этом репозитории vendor
будет линейной, и у нее никогда не будет ничего, что вы написали.
Теперь в вашем локальном клоне репо custom
вы сделаете следующее:
hg update default # update to the latest head in your default branch
hg pull http://host/hg/vendor # bring in the new changes from vendor as a new head
hg merge tip # merge _your_ most recent default cset with their new drop
И затем вы выполняете работу по объединению ваших локальных шансов по умолчанию с их новым падением кода. Когда вы довольны слиянием (прохождение тестов и т.д.), Вы возвращаете свой локальный клон обратно в http://host/hg/custom
.
Этот процесс может быть повторен по мере необходимости, обеспечивает хорошее разделение между вашей историей и их "и позволяет каждому из вашей команды нести ответственность за принятие нового кода от поставщиков, чтобы заботиться только об нормальной установке default/stable
в единственное репо, http://host/hg/custom
.