Zamykanie gałęzi Hg

103

Czy podczas używania hg branch FeatureBranchNamei publikowania go w centralnym repozytorium, które jest współdzielone przez programistów, istnieje sposób na ostateczne zamknięcie, FeatureBranchNamekiedy jego rozwój został oficjalnie połączony z domyślną gałęzią?

Byłoby również pomocne, gdyby FeatureBranchNamenie było widoczne podczas wykonywania hg branchespolecenia.

Nate
źródło

Odpowiedzi:

158
hg commit --close-branch

powinno wystarczyć do oznaczenia gałęzi blisko siebie. (zobacz hg commit)

--close-branch

oznacz gałąź jako zamkniętą, ukrywając ją na liście gałęzi.

Zobacz także ten wątek :

Oczekuję, że zamknę oddział, ponieważ ta linia rozwoju znalazła się w ślepym zaułku i nie chcę, żeby mi to przeszkadzało.
Dlatego, gdy gałąź została zamknięta, nie powinienem jej widzieć (na przykład w gałęziach, głowicach, dzienniku), chyba że wyraźnie poproszę o wyświetlenie zamkniętych gałęzi.

Powinienem zauważyć, że oczekuję, że zamknięta gałąź pozostanie w repozytorium; może się przydać w przyszłości, a commit --close-branchwiadomość powinna przynajmniej wyjaśniać, dlaczego oddział został zamknięty.
Przycinanie gałęzi to zupełnie inna sprawa.


Uwaga: działalność związana z „zamykaniem gałęzi” to jeden z aspektów, którego brakuje w Git w porównaniu z Mercurial :

Zawsze mówi się nam, że gałęzie w git są efemerycznymi rzeczami, które można wykorzystać i wyrzucić. O ile wiem, git nie ma sposobu, aby wskazać kolegom, że skończyłeś z gałęzią;
jedynym sposobem na to jest usunięcie go lub nadzieja, że ​​zobaczą ostateczne zatwierdzenie scalenia i zrozumieją, że gałąź jest zamknięta dla dalszego rozwoju.

[W Mercurial] Kiedy skończysz z gałęzią, nie możesz jednak usunąć jej z repozytorium; zamiast tego wydajesz zatwierdzenie, które zamyka gałąź, a Mercurial zauważa, że ​​gałąź jest zamknięta. Pozostanie trwałą częścią historii repozytorium.

VonC
źródło
3
Czy istnieje sposób na zamknięcie oddziału długoterminowego?
Thomas S.
@ThomasS. Pięć lat później nie wiem na pewno. Dokument został niedawno zaktualizowany: mercurial.808500.n3.nabble.com/…
VonC
1
@ThomasS. tak, ta odpowiedź pomogła mi z tym problemem. hg debugsetparent <revision> hg branch <branchOfRevision> Pamiętaj, że kolejność jest ważna. To sprawi, że repozytorium pomyśli, że jest w nowej wersji, podczas gdy wszystkie twoje pliki są z pierwotnej. Następnie możesz użyć zatwierdzenia --close-branch, ale użyj opcji -X *, aby wykonać pusty zatwierdzenie. hg commit --close-branch -X * -m "Closing branch."
Maske
8

Napisałem prosty skrypt, który zamyka gałąź, polecenia znalezione w PruningDeadBranches .

## Skrypt ##

#!/bin/bash
#script to close the not required branch in mercurial

hg up -C $1
if [ $? -eq 0 ]; then
    echo "$1 is up"
else
    echo "branch not found, please recheck your argument"
    exit 1
fi 
# if we are here then the branch is up, so we do the following
hg commit --close-branch -m 'this branch no longer required' 
echo "$1 is closed"
hg up -C default
echo "default is up" 

Jak

Przejdź do lokalnej kopii repozytorium i uruchom ten skrypt, podając argument. Na przykład:

$./the_script_above.sh bad_branch_name_to_close

Co to robi

Robi to w następujący sposób:

  1. Jeśli gałąź istnieje, aktualizuje ją do danej gałęzi lub istnieje z komunikatem o błędzie.
  2. Zamyka gałąź.
  3. Aktualizacje do domyślnej gałęzi.
  4. Zatrzymuje się.
Roshan Poudyal
źródło
Skrypt nie obsługuje gałęzi ze spacjami w nazwie.
Jared
@Jared, czy możesz uruchomić niezależne polecenie up ze swoim oddziałem. Na przykład: $ hg update yourbranchnamecontainingspace. Myślę, że moglibyśmy utworzyć nazwę gałęzi ze spacją, jednak pojawia się błąd analizy podczas wykonywania poleceń merkurialnych, takich jak aktualizacja . Możesz rozważyć użycie znaku spacji podczas przekazywania nazwy gałęzi jako parametru do skryptu. Twoje zdrowie.
Roshan Poudyal
nie jest echo "$1 is up"tu zduplikowany? W theni po fi? Ponadto taki skrypt może być pomocny, jeśli obsługuje opcję natychmiastowego scalenia z domyślnym
JakowL
1
@YakovL yes =). Dziękuję za powiadomienie. Zaktualizowałem skrypt. Oczywiście byłoby pomocne przy opcjonalnym scalaniu, spróbuję zaktualizować w przyszłości, ale do tego czasu możesz skalować skrypt według własnego gustu =)
Roshan Poudyal