Ostatnio pojawiło się kilka pytań dotyczących pomijania zmian podczas utrzymywania gałęzi wydań w Mercurial. Na przykład:
- Mercurial: Zmiany specyficzne dla gałęzi powracają po fikcyjnym połączeniu
- Dlaczego wycofania się Mercurial w jednej gałęzi mają wpływ na inne gałęzie?
Odkąd został wprowadzony w 2.0, zastanawiałem się nad użyciem, graft
aby uniknąć tego problemu. Biorąc pod uwagę takie drzewo wersji:
A---B---C---D---E---F---G---H---I---J
Załóżmy, że musimy stworzyć gałąź wydania, która pomija zmianę Zła E
.
hg update -r D
hg graft "F::J"
dając nam:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
- P1: Co się tutaj właśnie stało? Rozumiem,
transplant
że wygenerowałoby to łatki zF::J
, a następnie zastosowałoby jeD
, alegraft
mówi się, że używa raczej trójdrożnego scalania niż łat. Więc ....... jak to działa? Dlaczego to jest lepsze?
Powiedzmy, że teraz naprawię E
i połączę to z moją gałęzią wydania.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 to proste scalanie; nic specjalnego. M2 łączy oddziały, które mają "te same" (lub przynajmniej równoważne) zmiany.
- Q2: Czy to scalanie tylko normalny 3-way Scalanie użyciu
D
,J'
iM1
? - P3: Czy firma Mercurial przechowała / wykorzystała dodatkowe informacje o operacji przeszczepu, aby pomóc jej w połączeniu?
I w końcu...
- P4: Jakie są potencjalne problemy z takim przepływem?
źródło
P1: Pomaga, gdy są konflikty. Możesz wtedy użyć zwykłego narzędzia do scalania (dla mnie są to wbudowane znaczniki konfliktów, które edytuję w trybie smerge-mode Emacsa).
P2: To normalne scalanie.
P3: Nie.
P4: Myślę, że brzydko jest mieć dwie prawie identyczne gałęzie.
źródło