Question

À l'aide de Mercurial, comment puis-je regrouper toutes les révisions sont pas connus pour être dans un autre référentiel, y compris secret de révisions?

Je sais bundle's --base option arrive à inclure secret des révisions, mais je ne veux pas le --base comportement.(Et il semble exceptionnellement étrange secret que les révisions sont toujours inclus avec --base mais sont jamais inclus sans elle.Ne devrait-il pas être une option séparée?)

Pour info, j'ai souvent envie de faire une sauvegarde de toutes les révisions qui ne sont que dans mon local repo avant de tenter une potentiellement dangereux de l'histoire de réécriture.

Était-ce utile?

La solution

Il est exact que les hg bundle normalement exclure secret des révisions.C'est parce que c'est juste de l'exécution de l'équivalent de hg outgoing et le groupement de ces révisions.

De sorte que certaines des solutions de rechange:

  • Si vous savez que vous avez au moins un projet de publique ou sortant de la révision comme un ancêtre de votre secret révisions, alors vous pouvez utiliser

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

    pour obtenir ce que vous voulez.L' outgoing() revset prendra le manque de projet et de public révisions et parents(outgoing() sera adapté bases.Puisque vous utilisez --base vous obtenez tous les descendants (public, projet de, et le secret) à partir de ces bases.

  • Vous pourriez rendre temporairement votre secret révisions projet, bundle, puis la marque les secrets de nouveau:

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

    (J'utilise Zsh et là, j'ai eu à utiliser ${=secret} au lieu de $secret parce que Zsh ne fait pas de couper un mot sur le paramètre d'extension par défaut.)

    Il est important de la chaîne de commandes avec ; au lieu de && puisque vous voulez réinitialiser les phases indépendamment de ce qui se passe dans le hg bundle appel de transmission de mauvais paramètres de hg bundle ne doit pas signifier que vous perdez toutes les informations sur le secret des révisions.Notez également que depuis secret des révisions seuls ont le secret descendants, il n'y a pas de perte d'information avec cette technique.

    Vous pouvez le tourner dans une coquille alias:

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

    L' $@ est élargi par Mercurial avant l'alias est invoquée et cela vous permet d'insérer les arguments nécessaires pour hg bundle.

Notez que les informations de phase ne peut pas être stockée dans des faisceaux — le format bundle n'a pas été modifié pour en tenir compte.

Autres conseils

Si vous savez qu'il existe au moins un ensemble de modifications, vous pouvez utiliser ceci:

hg bundle -r "not public()" --base public()

Otoh, que, cela ne fonctionnera pas si il y a pas de révisions, utilisez ceci à la place:

hg bundle -r "not public()" --base null

Le problème avec Martin réponse est qu'il s'appuie sur sortant, qui à son tour repose sur une connexion directe à la poussée des pensions.Si vous n'avez toujours pas de connexion à internet pour que les pensions, ces méthodes fonctionnent bien pour moi.C'est aussi un peu plus simple que la phase de la danse.

Un test pour savoir si il y a de tout public des révisions est de capturer la sortie de:

hg log -r public() -l 1 --template "{rev}"

et de tester sa longueur, ou de la présence de [0-9].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top