2012-04-23 7 views
11

Mamy dwie głowy. Jednym z nich jest nasz główny szef rozwoju, a drugi to ten, o którym zapomniałem do dzisiaj. Znaleźliśmy błąd i naprawiliśmy go w naszym głównym dziale rozwojowym, i właśnie zdałem sobie sprawę, że powinien on zostać naprawiony także w starszym oddziale.Workflow do "backport" zmienić na inną gałąź Mercurial (Hg)?

Myślę, że lepiej byłoby dokonać zmiany na starszym oddziale i połączyć go z aktualnym oddziałem, ale nie zrobiliśmy tego w ten sposób. Czy to możliwe? Nie próbowaliśmy robić czegoś takiego i nie mogę naprawdę objąć głowy tym, jak to się stanie.

+0

http://stackoverflow.com/questions/854930/mercurial-cherry-picking-changes-for-commit – zerkms

+1

Uważam to najłatwiejszy jeśli „głównej gałęzi rozwojowej” to samo drzewo, gdzie są różne zmiany w ich własnych ("anonimowe") gałęzie, które rosną, a następnie wracają do ... –

+3

(brak odpowiedzi, stąd komentarz) * "Myślę, że lepiej byłoby dokonać zmiany na starszym oddziale" * ...To * może * było jeszcze lepiej zastosować tę poprawkę jako "daggy fix": cofasz się do miejsca, w którym błąd został wprowadzony, zatwierdzasz swoją poprawkę i scalasz wcześniej. Stosowanie go "tak wcześnie, jak to możliwe" * może * być nawet lepsze niż zastosowanie najpierw do "starszego oddziału" (cokolwiek to jest). W przypadku małych poprawek daggy fix do total rock (IMHO): http://mercurial.selenic.com/wiki/DaggyFixes – TacticalCoder

Odpowiedz

14

Tak, masz dwie dobre opcje:

do szczepień: nowy w Mercurial 2,0

Ta wersja wprowadzono graft command które mogą backport zmian w inteligentny sposób. W „inteligencja” jest to, że będzie korzystał scala wewnętrznie, a to oznacza, że ​​masz

  • Wsparcie zmienia nazwę: Wyobraź sobie, że naprawił błąd w pliku foo.c na gałęzi rozwojowej. W starszej gałęzi konserwacji foo.c nazwano bar.c. Używając hg graft, zmiana na foo.c może zostać poprawnie scalona ze starym bar.c.

  • trójdrożny łączy: Szczepienie polega twisting the graph around i wtopienie się w tym tymczasowym wykresie. Zaletą łączenia w jedną stronę jest to, że można używać zwykłego narzędzia do scalania graficznego w celu rozwiązywania konfliktów.

Aby skopiować końcówkę default na old-branch po prostu uruchomić

$ hg update old-branch 
$ hg graft default 

transplantacji: starsze wersje

Przed mieliśmy polecenie przeszczepu The transplant extension była droga. To proste rozszerzenie wyeksportuje zestaw zmian jako poprawkę i spróbuje zastosować poprawkę do innej wersji.

Ponieważ mamy do czynienia z "głupimi" łatami, rzeczy takie jak nazwy nie będą brane pod uwagę i nie otrzymasz wsparcia dla twojego narzędzia scalania, ponieważ nie ma trójstronnego scalenia. Mimo to, stwierdziłem, że przeszczep działa naprawdę dobrze w praktyce.

Korzystanie przeszczep jest prosta:

$ hg update old-branch 
$ hg transplant default 

Jest bardzo blisko do prowadzenia

$ hg update old-branch 
$ hg export default | hg import - 

wyjątkiem tego, że przeszczep również dodaje kawałek meta danych, który rejestruje oryginalny changeset w przeszczepionej changeset. Może to zostać wykorzystane do pominięcia przyszłych przeszczepów.