Как различить один каталог в Mercurial - PullRequest
1 голос
/ 11 декабря 2010

У меня есть два локальных репозитория Mercurial, назовем их product и skunkworks.Skunkworks является клоном продукта и в последнее время активно его коммитит.Мне нужно иметь возможность упаковать файлы diff из одной небольшой части дерева каталогов и вытащить их в виде файла патча.

У меня на диске следующая схема:

c:/dev/product
c:/dev/skunkworks

Область различий, которую я хочу упаковать, находится в каталоге c: / dev / skunkworks / buildstuff.Этот каталог существует в репо продукта.Я пока не хочу, чтобы все остальные подвергались изменениям в остальной части Skunkworks, но я должен быть в состоянии поделиться моими новыми качествами сборки.

Я пробовал несколько различных настроек параметров и комбинацийкоманды 'hg diff', но, очевидно, я делаю что-то не так.Любые указатели или предложения будут с благодарностью.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

Это можно сделать довольно легко, но сначала позвольте мне предложить, чтобы в следующий раз, когда вы выполняете независимые фрагменты работы (сборка и остальная часть скунсов), вы выполняли их в отдельных главах - тогда вы можете нажатьСборка непосредственно к продукту с помощью 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 обратно в продукт, все изменения сборки уже будут внесены, что сделает слияние менее автоматическим, чем оно можетв противном случае.

0 голосов
/ 11 декабря 2010

Я думаю, что все, что вам нужно, - это запускать в skunkworks hg diff buildstuff -r <rev>, где <rev> - последняя ревизия, соответствующая репо продукта.

Ниже приведено несколько файлов и каталогов, представляющих исходный репозиторий:

C:\>hg init test
C:\>cd test
C:\test>echo >file1
C:\test>echo >file2
C:\test>md dir1
C:\test>md dir2
C:\test>echo >dir1\file3
C:\test>echo >dir1\file4
C:\test>echo >dir2\file5
C:\test>echo >dir2\file6
C:\test>hg ci -Am 1
adding dir1/file3
adding dir1/file4
adding dir2/file5
adding dir2/file6
adding file1
adding file2

Мы будем клонировать и изменять файл в каждом из подкаталогов:

C:\test>cd ..
C:\>hg clone test skunk
updating to branch default
6 files updated, 0 files merged, 0 files removed, 0 files unresolved

C:\>cd skunk
C:\skunk>echo >>dir1\file4
C:\skunk>echo >>dir2\file5
C:\skunk>hg st
M dir1\file4
M dir2\file5

C:\skunk>hg ci -m skunk

Теперь просто отобразите diff для dir2 по сравнению с предыдущей версией:

C:\skunk>hg diff dir2 -r 0
diff --git a/dir2/file5 b/dir2/file5
--- a/dir2/file5
+++ b/dir2/file5
@@ -1,1 +1,2 @@
 ECHO is on.
+ECHO is on.
...