2010-04-16 33 views
7

Próbuję przyczynić się do projektu wykorzystującego Subversion. Użyłem Mercurial i jego rozszerzenia hgsubversion do sklonowania repozytorium. Moja praca ma miejsce w gałęzi funkcji.Jak radzić sobie z połączeniami z hgsubversion?

W jaki sposób zaktualizować gałąź funkcji o elementy występujące w gałęzi domyślnej (hg speak), tak jak w przypadku pnia (svn speak)?

Więc użyłem hg up feature, aby zaktualizować gałąź funkcji, a następnie hg pull, która dała mi zestawy zmian w domyślnej gałęzi. Zrobiłem więc hg merge default, dokonałem scalenia, a następnie wypróbowałem hg push, aby wysłać moje zestawy zmian do Subversion. A Mercurial powiedział: "Przepraszam, nie mogę znaleźć rodzica svn w wersji scalonej."

Odpowiedz

1

Mercurial jak kilka różnych trybów rozgałęzienia: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

Ten opisujesz jest „nazwanych oddziałów”, które jest najbardziej popularne, gdy pracujemy z repo, który jest dostęp tylko przez rtęć (Hg lub -git).

Jednak, gdy używasz hg-subversion, więc przesuwasz zmiany do/z subversion, które tylko nominalnie ma gałęzie, lepiej jest zachować wszystkie zmiany mercurialne w "domyślnym" nazwanym oddziale i używając wzorca "klonów i gałęzi" (który wolę mimo wszystko).

W szczególności ten komunikat Sorry, can't find svn parent of a merge revision. nie jest potomkiem wersji, która ma bezpośredni odpowiednik w subwersji.

Gdybym był, wycofałbym się z svn, a następnie przeniosłbym moją pracę do domyślnej gałęzi tego repo z komendą "przeszczep" (pakowane rozszerzenie). Jeśli chcesz korzystać z wielu funkcji równoległych w/hg-subversion, użyj oddzielnych klonów (są one tak tanie), ponieważ są bardziej zgodne z tym, jak subwersja myśli o gałęziach.

+0

Dzięki, Ryan. Ale z twoją sugestią, moja praca nie pojawi się wcześniej (tj. W Subversion). Chciałem móc zaangażować się w oddział Subversion.Właściwie mogę zobowiązać się do oddziału Subversion, ale nie mogę połączyć się z pnia w Mercurial. (A jak Subversion "tylko nominalnie" ma gałęzie?) Wygląda na to, że wsparcie dla łączenia oddziałów w Subversion jest słabsze niż w Mercurial, ale to nie jest takie straszne.A przynajmniej mogę oddzielić gałąź od pnia, a następnie wielokrotnie połączyć z pnia łatwo i wygodnie: problem pojawia się, gdy chcę ponownie zintegrować gałąź w bagażniku). – hibbelig

+0

Musiałem być niejasny w mojej sugestii, ponieważ nic w nim nie wyklucza popychania w górę rzeki. Po prostu sugeruję, że gdy raz zmienisz zbiory w mercurial, ograniczysz się do pojedynczej nazwanej gałęzi, ponieważ normalne łączenie się pomiędzy gałęziami mercurialnymi uniemożliwiłoby ci popychanie do subwersji (jak już widziałeś). Zachowaj wszystkie swoje zestawy danych w tej samej nazwie w ziemi rdzenia, używając wielu klonów, jeśli chcesz mieć oddzielne ścieżki rozwojowe i powinieneś być w porządku. –

+0

Jeszcze raz dziękuję, Ryan. Jak mogę pracować z wieloma gałęziami * Subversion *? Proszę zauważyć, że zrobiłem "hg scalenie" dwóch gałęzi istniejących w Subversion, a następnie chciałem wypchnąć scalenie z powrotem do Subversion. Pchnięcie scalania nie powiodło się z powyższym komunikatem o błędzie. Gdybym zrobił to samo scalenie po stronie Subversion, scalenie przybyłoby nietknięte po stronie Mercurial (po 'hg pull'). – hibbelig

0

musiałem rysunek to dla siebie i napisałem go tutaj:

http://notebook.3gfp.com/2010/05/pushing-a-new-feature-from-a-mercurial-repo-into-an-svn-repo/

jeszcze nie zorientowali się, jak zamknąć oddział w dywersji i mają mercurial wykres wyglądać poprawne.

+0

Witaj Harvey, wykonujesz scalenie po stronie Subversion. Wolałbym połączyć się z Mercurialem, ale jeśli to nie jest możliwe, to tak właśnie jest. Szkoda. Kai – hibbelig

+1

@hibbelig: tak, zapytałem autorów hgsubversion o to i powiedzieli, że jest to ograniczenie svn, ponieważ myślę, że nie mają podwójnych "rodziców" takich jak hg. W ten sposób hg wie o scaleniu. – Harvey

5

W końcu doszedłem do tego, jak odzyskać swoje repozytorium po wydarzeniu opisanym w pytaniu, aby móc kontynuować pracę bez konieczności ponownego klonowania repozytorium nadrzędnego (co jest oczywiście dość powolna operacja, gdy wyciągasz z Subversion!). Jeśli "podpowiedź" Subversion wyprzedza cię, więc nie możesz już naciskać, po prostu upewnij się, że masz wbudowane rozszerzenie "rebase" aktywowane w twoim Mercurialu poprzez linię $ HOME/.hgrc:

[extensions] 
rebase = 

i to powinno być w stanie uruchomić tego polecenia gdy repozytorium zostanie zaklinowany:

$ hg rebase --svn 

Jeśli dobrze rozumiem to poprawnie, rozpuszcza aktualnej gałęzi, które podjęło się z dala od Subversion głowę i przebudowuje go na szczycie gałąź "wskazówka" w Mercurial odpowiadająca HEAD w Subversion. Stamtąd możesz kontynuować pracę i z powodzeniem ponownie naciskasz. Do tej pory zawsze działało dla mnie; daj mi znać, jeśli napotkasz jakiekolwiek problemy!

+1

Kilka razy użyłem tego polecenia. Mój przepływ pracy dla lokalnych oddziałów przeciwko repozytoriom SVN to zazwyczaj hg pull, hg rebase --svn, hg push. – MattGWagner

+0

To nie jest odpowiedź :-( – Kugel

Powiązane problemy