Łączenie gałęzi Mercurial z oddzielnych repozytoriów

Próbuję wymyślić, jak połączyć gałęzie z oddzielnego repo do prądu.

Mam następujące:

PJT1 - zawiera gałęzie default i foodog

PJT2 - contains Branch default

Z PJT2 robię co następuje:

$ hg fetch -y ../PJT1 -r foodog -m "this is a test"

Teraz, jeśli spojrzę w PJT2, widzę poprawne pliki i zmiany. Jednak jeśli zrobię hg branches, dostaję następujące:

[someone@myhome pjt2]$ hg branches
foodog                         1:c1e14fde816b
default                        0:7b1adb938f71 (inactive)

I hg branch ujawniają co następuje:

[someone@myhome pjt2]$ hg branch
foodog

Jak pobrać zawartość z Pjt1 's foodog branch into pjt2' s default branch?

Author: W55tKQbuRu28Q4xv, 2011-03-04

2 answers

Musisz się połączyć, ale pamiętaj, że zmiany na gałęzi foodog zawsze będą na foodog -- gałęzie nigdy nie odchodzą, ale mogą być ukryte. Ta sekwencja poleceń jest tak blisko, jak dojdziesz do tego, o co prosisz:

cd PJT2
hg update default # just in case you were somewhere else
hg pull ../PJT1 -r foodog  # that gets you foodog
hg merge foodog  # that merges the changes into default
hg commit # commit the merge
hg update foodog # go to the most recent change in foodog (note: it is not a 'head')
hg commit --close-branch

Po połączeniu hg branches będzie nadal wyświetlać foodog, chyba że zrobisz hg branches --active, które pokazuje tylko gałęzie, które mają głowy na nich. Po commit --close-branch nie zobaczysz foodog, chyba że to zrobisz hg branches --closed.

To dlatego, że gałęzie w Mercurialu nigdy nie znikają całkowicie (projekt cecha), że często są zarezerwowane tylko dla rzeczy na całe życie, takich jak release-1.0 lub stable. W przypadku krótkotrwałych wysiłków, takich jak błędy i funkcje, rozważ użycie zakładek. Oto świetne porównanie tych dwóch: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial

 55
Author: Ry4an Brase,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-03 21:56:21

Możesz również spróbować użyć rozszerzenia rebase . Wyglądałoby to mniej więcej tak:

hg fetch -y ../PJT1 -r foodog -m "this is a test"
hg rebase --source <sRev> --dest <dRev>

Akcja rebase usunie changeset sRev i wszystkie potomkowie i zastosuje grupę zmian do changeset dRev . Domyślnie zmiany będą stosowane w domyślnej gałęzi. Tak więc, w Twoim przypadku, sRev będzie pierwszym zestawem zmian w branch foodog i dRev będzie domyślnym zestawem zmian, który chcesz zastosować za.

Na koniec, jeśli chcesz to nadpisać i zachować nazwę gałęzi źródłowej, możesz użyć opcji rebase --keepbranches. Twoje pytania wskazują, że jest to dokładnie to, czego nie chcesz robić, ale nadal należy to zauważyć.

 0
Author: dls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-04 22:03:18