Łą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?
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
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ć.
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