2010-06-29 16 views
7

Mam duży, nazwany oddział z wieloma zmianami. Niektóre z tych zmian są nieniszczące, dlatego chcę najpierw wybrać te konkretne pliki i połączyć je z domyślnymi tak szybko, jak to możliwe. (Następnie, niszczące zmiany również zostaną scalone).W Mercurial, w jaki sposób wybrać określone pliki z nazwanego oddziału, aby połączyć się z domyślnym?

W Git, utworzę kolejną gałąź i zgrupuję wszystkie zestawy zmian poza indeksem, a następnie dodaję określone pliki do indeksu i zatwierdzę. Potem mogłem połączyć tę tymczasową gałąź z wzorcem, więc mistrz ma czyste zatwierdzenie z tylko nieniszczącą zmianą. Nie wiem, jak to zrobić z Mercurialem.

Odpowiedz

1

O ile mi wiadomo, Mercurial nie ma żadnych narzędzi do podziału zestawów zmian. Jeśli masz szczęście, wszystkie zmiany, które chcesz, są w osobnych zestawach zmian, a następnie możesz użyć TransplantExtension. Myślę, że można go porównać do Git's cherry-pick, ale nie użyłem git dużo.

Możesz również użyć hg diff, aby ręcznie zatwierdzić zmiany do określonego pliku do nowego oddziału. Użyj zakresu obrotów, aby oznaczyć cały oddział źródłowy:

hg diff myfile -r startrevision:endrevision 

Dane wyjściowe można traktować jako poprawki. Zrób to dla każdego pliku, który chcesz i zatwierdz, a następnie scal. Pomijanie destrukcyjnych zmian. Oczywiście możesz też zrobić to wielokrotnie, gdy destrukcyjna zmiana znajduje się w środku zakresu rewizji.

Powiedziawszy, że, to, co próbujesz zrobić, nie jest zbudowane z czegoś, co jest rajem. Ta hardcorowa edycja historii jest bardziej obszarem Gita (zauważ, że to tylko moja opinia). Zachowaj stabilne zmiany i niszczące zmiany w oddzielnych zestawach zmian (a może nawet w oddzielnych oddziałach). Używam transplant, rebase i strip do przenoszenia zmian. Kiedy wszystko jest gotowe, są one scalane i odpowiednio wypychane.

Och, i sprawdź MercurialQueues. Nie używałem go sam, ale widziałem, jak robi szalone rzeczy. Może to jest w stanie zrobić coś zgodnie z tym, czego chcesz.

+0

Can Używam: hg rebase --collapse --keepbranches -b -d Wydaje się umieścić wszystkie zmienione pliki w moim katalogu roboczym bez ich zatwierdzania. Czy są jakieś skutki uboczne? – Rygu

+0

Nie użyłem rebase do niczego oprócz najbardziej podstawowych rzeczy, sugeruję, żebyś po prostu przeczytał dokumenty i wypróbował je dokładnie w repozytoriach testowych, aby dowiedzieć się, jak to działa. A tak przy okazji, ten komentarz jest całkowicie poprawnym (i osobnym) pytaniem, które można zadać tutaj na Stackoverflow. =) – Mizipzor

+0

Mercurial ma rozszerzenie do dzielenia zestawów zmian - nazywa się histedit. Po prostu zatwierdzasz podczas edytowania zestawu zmian. – Jack

4

Myślę, że mercurialqueues jest tym, czego potrzebujesz. Za pomocą mq możesz zmienić dowolny zestaw zmian w łatkę i dowolną poprawkę w zestawie zmian. Tak więc biorąc zestaw zmian, przekształcając go w plaster usuwający porcje z łatki, której nie chcesz, a następnie stosujący ją do dowolnej gałęzi. Jest to jednak dość operacja complex i wymaga pewnej dyscypliny z twojej strony. Więc spróbowałbym przyśpieszyć twój przepływ pracy podczas testowego repo przed próbowaniem kodu, na którym ci zależy.

+0

Dzięki za linki, sprawdzę je. Na razie wydaje mi się, że znalazłem odpowiedź (patrz komentarz powyżej). – Rygu

+0

jest fajnie. Zasadniczo starałem się nadać wiarygodność odpowiedzi mizipstora w odniesieniu do kwestii mq. –

3

Możesz użyć hg cat, aby pobrać zawartość pliku, który istnieje w dowolnym oddziale, i zastąpić wersję roboczą.

To nie jest technicznie seryjnej, ale skoro jesteś zastępując całe pliki, które nie powinny mieć zbyt wiele czasu połączenia złych rzeczy nowsze:

na przykład chwycić myfile.c formularz gałąź somefeature, i zastąpić roboczą wersję kopiowania zrobić:

hg cat path/to/myfile.c -r somefeature > path/to/myfile.c 

nuta że to całkowicie zastępuje plik kopii roboczej więc upewnij się, że nie mają zaległych zmian pierwsze

Powiązane problemy