Это можно сделать довольно легко, но сначала позвольте мне предложить, чтобы в следующий раз, когда вы выполняете независимые фрагменты работы (сборка и остальная часть скунсов), вы выполняли их в отдельных главах - тогда вы можете нажатьСборка непосредственно к продукту с помощью hg push без перемещения skunkworks туда же.Этот шаблон будет выглядеть следующим образом:
hg clone product skunkworks
cd skunkworks
... build hacking ...
hg commit
... build hacking ...
hg commit
hg update REVNUMBER # where revnumber is the last revision that exists in product
... skunkworks hacking ...
hg commit # at this point you'll see (+1 heads)
... more skunkworks hacking ...
hg commit
, в этот момент ваш клон Skunkworks будет иметь две головы, одну со сборкой, а другую со сборкой.Вы можете переключаться назад и вперед во время работы, чередуя между собой build и sunkworks, сохраняя их отдельными внутри одного клона.Если во время работы над skunkworks вы тоже хотите собрать тонкости сборки, вы можете сделать:
hg update SKUNKWORKSHEAD
hg merge BUILDHEAD
, который объединяет сборку с skunkworks, но сборочный материал по-прежнему не имеет никаких скунсов в качестве родителя, поэтому в любое времямог бы сделать:
cd ../product
hg pull -r BUILDHEAD ../skunkworks
и вы бы переместили только компоненты сборки в продукт без каких-либо других изменений в skunkworks.
Это оптимальный способ сделать это (технически называетсяанонимные ветки), потому что, когда вы будете готовы переместить Skunkworks в продукт, он будет точно знать, откуда произошли изменения в сборке и как правильно интегрировать их в Skunkworks.
Вот так всето, что вы хотите сделать сейчас, это, вероятно:
cd skunkworks
hg diff -I buildstuff/** -r LAST_REV_IN_PRODUCT -r tip > ../applyme.patch
cd ../product
hg import --no-commit ../applyme.patch
hg commit
Недостатком является то, что когда вы объединяете skunkworks обратно в продукт, все изменения сборки уже будут внесены, что сделает слияние менее автоматическим, чем оно можетв противном случае.