Domanda

Utilizzando Mercurial, come posso raggruppare tutti gli insiemi di modifiche non noto per essere in un altro repository, tra segreto insiemi di modifiche?

So bundle's --base opzione avviene per includere segreto insiemi di modifiche, ma non voglio che il --base il comportamento.(E sembra insolitamente strano che segreto insiemi di modifiche sono sempre incluso --base ma sono mai incluso senza di essa.Non dovrebbe esserci una opzione separata?)

FYI, ho comunemente vuole fare un backup di tutti gli insiemi di modifiche che sono solo nel mio repository locale prima di tentare una potenzialmente pericolosa riscrivere la storia.

È stato utile?

Soluzione

È giusto che hg bundle normalmente escludere segreto insiemi di modifiche.Questo è perché è solo in esecuzione, l'equivalente di hg outgoing e bundling questi insiemi di modifiche.

Così alcune soluzioni:

  • Se sapete di avere almeno un progetto pubblico o in uscita changeset come un antenato del tuo segreto insiemi di modifiche, quindi è possibile utilizzare

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

    per ottenere quello che vuoi.Il outgoing() revset pick mancanti progetto e pubblico insiemi di modifiche e parents(outgoing() sarà adatto basi.Dal momento che si utilizza --base è possibile ottenere tutti i discendenti (pubblico, bozza, e segreto) da queste basi.

  • Si potrebbe rendere temporaneamente il tuo segreto insiemi di modifiche di progetto, bundle e le contrassegna segreto:

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

    (Io uso Zsh e ci ho dovuto usare ${=secret} invece di $secret perché Zsh non fare parola suddivisione in espansione di parametro impostazione predefinita.)

    È importante catena di comandi con ; invece di && dal momento che si desidera ripristinare le fasi indipendentemente da ciò che accade nel hg bundle chiamata di passaggio di parametri errati per hg bundle non deve significare che si perde tutte le informazioni su il segreto insiemi di modifiche.Nota anche che dal segreto changeset solo segreto discendenti, non c'è perdita di informazioni con questa tecnica.

    È possibile trasformare questo in un guscio alias:

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

    Il $@ si tratta dell'espansione Mercurial prima l'alias viene richiamato e questo consente di inserire gli argomenti necessari per hg bundle.

Si noti che la fase di informazione non possono essere memorizzati in fasci — il bundle formato non è stato modificato per adattarlo.

Altri suggerimenti

Se sai che c'è almeno un pubblico di modifiche, è possibile utilizzare questo:

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

OTOH, che non funziona se non ci sono pubblici insiemi di modifiche, usa invece questo:

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

Il problema con Martin risposta è che si basa su di uscita, che a sua volta si basa su una connessione diretta a spingere repo.Se non si dispone sempre di una connessione internet per che repo, questi metodi funzionano bene per me.E 'anche un po' più semplice rispetto alla prima fase della danza.

Un test per capire se ci sono eventuali pubblico insiemi di modifiche è quello di catturare l'output di:

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

e per testare la sua lunghezza, o la presenza di [0-9].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top