Frage

Wie kann ich mit Mercurial alle Änderungssätze bündeln, von denen nicht bekannt ist, dass sie sich in einem anderen Repository befinden? einschließlich geheime Änderungssätze?

Ich weiß bundle'S --base Option enthält zufällig geheime Änderungssätze, aber ich möchte das nicht --base Verhalten.(Und es scheint ungewöhnlich seltsam, dass es geheime Änderungssätze gibt stets inbegriffen --base aber sind niemals enthalten ohne es.Sollte es nicht eine separate Option geben?)

Zu Ihrer Information: Ich möchte im Allgemeinen eine Sicherungskopie aller Änderungssätze erstellen, die sich nur in meinem lokalen Repo befinden, bevor ich versuche, den Verlauf neu zu schreiben.

War es hilfreich?

Lösung

Da hast du recht hg bundle schließt normalerweise geheime Änderungssätze aus.Dies liegt daran, dass es nur das Äquivalent von ausführt hg outgoing und Bündeln dieser Änderungssätze.

Also einige Workarounds:

  • Wenn Sie wissen, dass Sie mindestens einen Entwurf oder einen öffentlichen ausgehenden Änderungssatz als Vorfahren Ihrer geheimen Änderungssätze haben, können Sie diesen verwenden

    $ hg bundle --base "parents(outgoing())"
    

    um zu bekommen, was du willst.Der outgoing() revset wählt den fehlenden Entwurf und die öffentlichen Änderungssätze aus und parents(outgoing() werden geeignete Stützpunkte sein.Da du es verwendest --base Sie erhalten alle Nachkommen (öffentlich, Entwurf und geheim) von diesen Basen.

  • Sie könnten Ihre geheimen Änderungssätze vorübergehend als Entwurf und Bündel festlegen und sie dann wieder als geheim markieren:

    $ secret=$(hg log --template "{rev} " -r "secret()"); \
      hg phase -d $secret; \
      hg bundle out.hg; \
      hg phase -f -s $secret
    

    (Ich benutze Zsh und da musste ich verwenden ${=secret} anstatt $secret weil Zsh standardmäßig keine Wortaufteilung bei der Parametererweiterung durchführt.)

    Es ist wichtig, die Befehle mit zu verketten ; anstatt && da Sie die Phasen unabhängig davon, was in der passiert, zurücksetzen möchten hg bundle Aufruf – Übergabe falscher Parameter an hg bundle sollte nicht bedeuten, dass Sie alle Informationen über die geheimen Änderungssätze verlieren.Beachten Sie außerdem, dass bei dieser Technik kein Informationsverlust auftritt, da geheime Changesets nur geheime Nachkommen haben.

    Sie können dies in einen Shell-Alias ​​umwandeln:

    [alias]
    bundle-all = !secret=$(hg log --template "{rev} " -r "secret()");
                 hg phase -d $secret;
                 hg bundle $@;
                 hg phase -f -s $secret
    

    Der $@ wird von Mercurial erweitert, bevor der Alias ​​aufgerufen wird, und so können Sie die erforderlichen Argumente für einfügen hg bundle.

Beachten Sie, dass Phaseninformationen nicht in Bundles gespeichert werden können – das Bundle-Format wurde nicht entsprechend geändert.

Andere Tipps

Wenn Sie wissen, dass es mindestens ein öffentliches Ändern gibt, können Sie dies verwenden: generasacodicetagpre.

otoh, das nicht funktioniert, wenn keine öffentlichen Änderungen vorhanden sind, verwenden Sie dies statt: generasacodicetagpre.

Das Problem mit der Antwort von Martin ist, dass er auf ausgehender ist, was wiederum auf eine direkte Verbindung zum Push-Repo ist.Wenn Sie nicht immer über eine Internetverbindung mit diesem Repo verfügen, funktionieren diese Methoden für mich gut.Es ist auch etwas einfacher als der Phasentanz.

Ein Test, ob es sich um öffentliche Änderungen gibt, um die Ausgabe von: aufzunehmen: generasacodicetagpre.

und testen Sie seine Länge oder das Vorhandensein von [0-9].

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top