Jak poprawnie zamknąć gałąź funkcji w Mercurial?

Skończyłem pracę nad gałęzią funkcji feature-x. Chcę połączyć wyniki z powrotem do gałęzi default i zamknąć feature-x w celu pozbycia się jej w wyjściu hg branches.

Wymyśliłem następujący scenariusz, ale ma pewne problemy:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

Więc feature-x branch (changests 40-41) jest zamknięta, ale jest jedna nowa głowica , zestaw zmian gałęzi zamykającej 44, który będzie wyświetlany w hg heads za każdym razem:

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

Update : wygląda na to, że od wersji 1.5 Mercurial nie pokazuje już głowic zamkniętych gałęzi w wyjściu hg heads.

Czy możliwe jest zamknięcie połączonej gałęzi bez pozostawienia jeszcze jednej głowy? Czy istnieje bardziej poprawny sposób zamknięcia gałęzi funkcji?

Podobne pytania:

Author: Community, 2010-02-10

4 answers

Jednym ze sposobów jest pozostawienie połączonych gałęzi funkcji otwartych (i nieaktywnych):

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

Innym sposobem jest zamknięcie gałęzi funkcji przed scaleniem za pomocą dodatkowego commita:

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)
Pierwsza jest prostsza, ale pozostawia otwartą gałąź. Drugi nie pozostawia otwartych głów/gałęzi, ale wymaga jeszcze jednego dodatkowego commita. Można połączyć ostatni commit do gałęzi feature z tym dodatkowym commitem używając --close-branch, ale należy wiedzieć z góry, który commit będzie ostatnim jeden.

Update: od Mercurial 1.5 możesz zamknąć gałąź w dowolnym momencie, więc nie pojawi się ona zarówno w hg branches, jak i hg heads. Jedyną rzeczą, która może cię denerwować, jest to, że technicznie Wykres rewizji będzie miał jeszcze jedną rewizję bez childena.

Aktualizacja 2: od Mercurial 1.8 zakładki stały się podstawową cechą Mercurial. Zakładki są wygodniejsze do rozgałęzień niż nazwane gałęzie. Zobacz też: pytanie:

 215
Author: Andrey Vlasovskikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:44

Imho są dwie sprawy dla oddziałów, które zapomniano zamknąć

Przypadek 1: branch nie został scalony do domyślnego

W tym przypadku aktualizuję gałąź i wykonuję kolejny commit za pomocą --close-branch, niestety to powoduje, że gałąź staje się nową końcówką i dlatego przed przeniesieniem jej do innych klonów upewniam się, że prawdziwa końcówka otrzyma więcej zmian, a inni nie będą się mylić z tą dziwną końcówką.

hg up myBranch
hg commit --close-branch

Przypadek 2: oddział został połączony w default

Ten przypadek nie różni się zbytnio od przypadku 1 i można go rozwiązać poprzez odtworzenie kroków dla Przypadku 1 i dwóch dodatkowych.

W tym przypadku uaktualniam do zestawu zmian gałęzi, wykonuję kolejny commit za pomocą --close-branch i scalam nowy zestaw zmian, który stał się tip do domyślnego. ostatnia operacja tworzy nową końcówkę, która znajduje się w domyślnej gałęzi-hurra!

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch
Mam nadzieję, że pomoże to przyszłym czytelnikom.
 77
Author: Nachbars Lumpi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-01 23:23:17

EDIT za późno... Wiem, że przeczytaj swój komentarz stwierdzający, że chcesz zachować zestaw zmian feature-x, więc podejście klonowania tutaj nie działa.

Nadal niech odpowiedź tutaj, bo może pomóc innym.

Jeśli chcesz całkowicie pozbyć się "funkcji X", ponieważ na przykład nie zadziałało, możesz sklonować. Jest to jedna z metod wyjaśnionych w artykule i działa, i mówi konkretnie o głowach.

As far as I understand you masz to i chcesz pozbyć się głowy "feature-x" raz na zawsze:

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

Więc zrób to:

hg clone . ../cleanedrepo --rev 7

I będziesz miał następujące, i zobaczysz, że funkcja-x rzeczywiście zniknęła:

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

Może źle zrozumiałem, co chciałeś, ale proszę nie modyfikować, poświęciłem czas na odtworzenie twojego przypadku użycia:)

 11
Author: SyntaxT3rr0r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-10 18:13:30

To dziwne, że nikt jeszcze nie zasugerował najbardziej solidnego sposobu zamykania gałęzi funkcji... Możesz po prostu Połączyć scalić commit z flagą --close-branch (tzn. zmodyfikować pliki i zamknąć gałąź jednocześnie):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f
Więc to wszystko. Na revgraphie nie ma żadnej dodatkowej głowy. Żadnych dodatkowych zobowiązań.
 7
Author: tav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-06 22:19:08