/ / Jak zrestrukturyzować repozytorium rtęciowe z dwoma głównymi, równoległymi gałęziami - kontrola wersji, merkurial, gałąź

Jak zrestrukturyzować repozytorium mercurial z dwiema głównymi, równoległymi gałęziami - wersja-control, mercurial, branch

Historia mojego repozytorium wygląda następująco:

A -- B -- C (branch "foo")

-- D (branch "bar")

Obie gałęzie są gałęziami „wysyłającymi” i są zasadniczo różnymi frontendami do wspólnego backendu.

Cały kod był kiedyś w jednej gałęzi, z foo lub bar funkcje włączane lub wyłączane przez przełącznik kompilatora, ale rozgałęziłem się, aby ułatwić sobie pracę z każdym z nich osobno.

Problem polega na tym, że wspólne pliki „zaplecza” same w sobie prawdopodobnie powinny stanowić oddzielną gałąź - i często tego chcę właśnie pracować nad tymi wspólnymi plikami. Ze względu na sposób, w jaki stworzyłem te gałęzie, historia jest trochę popieprzona: w oddziale barz przeszłości, kiedyś miał funkcje od foo.

Obecnie po prostu wprowadzam zmiany w jednym oddziale, a następnie używam hg transplant aby skopiować te same zmiany do drugiego oddziału.

Zamiast tego chciałbym móc wprowadzać zmiany w ten sposób:

       __ C __ D"   (branch "foo")
/      /
A -- B -- D         (branch "backend")
      
-- E -- D""  (branch "bar")

Oznacza to pracę w oddziale backend, a następnie w każdym z oddziałów wysyłkowych (foo i bar), Używam hg merge backend.

Jak najlepiej przejść z obecnej sytuacji do opisywanej przeze mnie? Jedyny sposób, w jaki mogę myśleć, to:

  1. Usuń wszystko foo i bar funkcje i nazwij tę gałąź backend.

  2. Usuń stary foo i bar oddziałów.

  3. Dodaj ręcznie foo funkcje do backend i nazwij tę gałąź fooi podobnie dla bar.

Czy istnieje lepszy sposób?

Czy to jest właściwe postępowanie?

Odpowiedzi:

1 dla odpowiedzi № 1

Ile zestawów zmian jest na gałęziach foo i bar? Czy zestawy zmian zaplecza (przeszczepione) są oddzielone od zestawów zmian interfejsu?

Jeśli zestawów zmian nie jest wiele i są czyste, możesz to zrobić:

       C -- 1 -- 2 -- D -- 3   (branch "foo")
/
A -- B ----------- C" -- D"   (branch "backend")

C" -- 4 ------ D" --- 5   (branch "bar")

(Tutaj A, B, C, D są powiązane z backendem; 1, 2, 3 są związane z foo; 4, 5 są związane z paskiem).

- tj. Stwórz swojego bracha backend w oparciu o najnowszego wspólnego przodka foo i bar, a następnie przeszczep tam wszystkie zestawy zmian związane z zapleczem. Od tego momentu będziesz mógł się łączyć backend w którąkolwiek gałąź.


0 dla odpowiedzi nr 2

Wybrałem podzielenie go na wiele repozytoriów zamiast kilku oddziałów w jednym repozytorium, w następujący sposób:

  1. Zamknąłem bar Oddział.

  2. Sklonowałem oryginalne repozytorium do nowego repozytorium backend.

  3. Usunąłem wszystkie foozwiązany z kodem.

  4. Wyciągnąłem te zmiany do głównego repozytorium, a następnie natychmiast wycofałem się z nich (więc foo kod pozostaje). To stało się moje foo magazyn.

  5. Sklonowałem backend repozytorium w nowe repozytorium bar.

  6. Skopiowałem i wkleiłem wszystkie pliki z teraz zamkniętego bar oddział do bar magazyn.

To zatrzymało moją historię fooi utracił ciągłość historii bar (chociaż cała historia wciąż tam jest, gdybym jej potrzebowała); a teraz oba foo i bar są klonami, z modyfikacjami, backend repozytorium, które jest dokładnie tym, czego chciałem.