Schließen von Hg-Zweigen

103

Gibt es bei der Verwendung hg branch FeatureBranchNameund Veröffentlichung in einem zentralen Repo, das von Entwicklern gemeinsam genutzt wird, eine Möglichkeit, das zu schließen, FeatureBranchNamewenn die Entwicklung offiziell mit dem Standardzweig zusammengeführt wurde?

Es wäre auch hilfreich, wenn das FeatureBranchNamebeim Ausführen eines hg branchesBefehls nicht sichtbar wäre .

Nate
quelle

Antworten:

158
hg commit --close-branch

sollte ausreichen, um einen Zweig in der Nähe zu markieren. (siehe hg commit)

--close-branch

Markieren Sie einen Zweig als geschlossen und verstecken Sie ihn vor der Zweigliste.

Siehe auch diesen Thread :

Ich gehe davon aus, dass ich eine Niederlassung schließe, weil diese Entwicklungslinie in eine Sackgasse geraten ist und ich mich nicht mehr damit beschäftigen möchte.
Wenn ein Zweig geschlossen wurde, sollte ich ihn daher nicht sehen (z. B. in Zweigen, Köpfen, Protokollen), es sei denn, ich möchte ausdrücklich darum bitten, geschlossene Zweige zu sehen.

Ich sollte beachten, dass ich davon ausgehe, dass ein geschlossener Zweig im Repository verbleibt. Dies kann in Zukunft nützlich sein, und die commit --close-branchNachricht sollte zumindest erklären, warum der Zweig geschlossen wurde.
Das Beschneiden von Zweigen ist eine ganz andere Sache.


Hinweis: Das Geschäft mit dem Schließen von Filialen ist ein Aspekt, der in Git im Vergleich zu Mercurial als fehlend angesehen wird :

Zweige in Git sind, wie uns immer gesagt wird, vergängliche Dinge, die verwendet und weggeworfen werden müssen, und soweit ich weiß, hat Git keine Möglichkeit, Ihren Kollegen anzuzeigen, dass Sie mit einem Zweig fertig sind.
Die einzige Möglichkeit, dies zu tun, besteht darin, es zu löschen oder zu hoffen, dass die endgültige Zusammenführung festgeschrieben wird, und zu verstehen, dass der Zweig für die weitere Entwicklung geschlossen ist.

[In Mercurial] Wenn Sie mit einem Zweig fertig sind, können Sie ihn jedoch nicht aus dem Repository löschen. Stattdessen geben Sie ein Commit aus, das den Zweig schließt, und Mercurial stellt fest, dass der Zweig geschlossen ist. Es bleibt ein fester Bestandteil Ihres Repository-Verlaufs.

VonC
quelle
3
Gibt es eine Möglichkeit, eine langfristige Niederlassung zu schließen?
Thomas S.
@ ThomasS. 5 Jahre später weiß ich es nicht genau. Das Dokument wurde kürzlich aktualisiert: mercurial.808500.n3.nabble.com/…
VonC
1
@ ThomasS. Ja, diese Antwort hat mir bei diesem Problem geholfen. hg debugsetparent <revision> hg branch <branchOfRevision> Beachten Sie, dass die Reihenfolge wichtig ist. Dadurch wird Ihr Repo glauben, dass es sich um die neue Version handelt, während alle Ihre Dateien von der ersten stammen. Danach können Sie das Commit --close-branch verwenden, aber die Option -X * verwenden, um ein leeres Commit durchzuführen. hg commit --close-branch -X * -m "Closing branch."
Maske
8

Ich habe ein einfaches Skript geschrieben, das das Schließen des Zweigs vervollständigt . Die Befehle finden Sie bei PruningDeadBranches .

## Skript ##

#!/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" 

Wie man

Wechseln Sie zur lokalen Kopie des Repositorys und führen Sie dieses Skript mit einem Argument aus. Beispielsweise:

$./the_script_above.sh bad_branch_name_to_close

Was tut es

Dies bewirkt Folgendes:

  1. Wenn der Zweig vorhanden ist, wird er auf den angegebenen Zweig aktualisiert oder es wird eine Fehlermeldung angezeigt.
  2. Es schließt die Filiale.
  3. Aktualisierungen des Standardzweigs.
  4. Stopps.
Roshan Poudyal
quelle
Das Skript verarbeitet keine Zweige mit Leerzeichen im Namen.
Jared
@Jared können Sie mit Ihrem Zweig einen unabhängigen Aufwärtsbefehl ausführen. Zum Beispiel : $ hg update yourbranchnamecontainingspace. Ich denke, wir könnten einen Verzweigungsnamen mit Leerzeichen erstellen, aber Sie erhalten einen Analysefehler, wenn Sie mercurial-Befehle wie update ausführen . Möglicherweise möchten Sie das Leerzeichen maskieren, während Sie den Zweignamen als Parameter an das Skript übergeben. Prost.
Roshan Poudyal
wird hier nicht echo "$1 is up"dupliziert? In thenund nach fi? Ein solches Skript könnte auch hilfreich sein, wenn eine Option zum
sofortigen
1
@ YakovL ja =). Danke für die Benachrichtigung. Ich habe das Skript aktualisiert. Natürlich wäre es hilfreich für die optionale Zusammenführung, ich werde versuchen, in Zukunft zu aktualisieren, aber bis dahin können Sie das Skript nach Ihrem Geschmack skalieren =)
Roshan Poudyal