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 bar
z 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:
Usuń wszystko
foo
ibar
funkcje i nazwij tę gałąźbackend
.Usuń stary
foo
ibar
oddziałów.Dodaj ręcznie
foo
funkcje dobackend
i nazwij tę gałąźfoo
i podobnie dlabar
.
Czy istnieje lepszy sposób?
Czy to jest właściwe postępowanie?
Odpowiedzi:
1 dla odpowiedzi № 1Ile 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:
Zamknąłem
bar
Oddział.Sklonowałem oryginalne repozytorium do nowego repozytorium
backend
.Usunąłem wszystkie
foo
związany z kodem.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ę mojefoo
magazyn.Sklonowałem
backend
repozytorium w nowe repozytoriumbar
.Skopiowałem i wkleiłem wszystkie pliki z teraz zamkniętego
bar
oddział dobar
magazyn.
To zatrzymało moją historię foo
i 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.