Domanda

Ho finito di lavorare su un ramo feature-x.Voglio unire i risultati per il default ramo e chiudere feature-x al fine di sbarazzarsi di esso in uscita di hg branches.

Mi si avvicinò con la seguente scenario, ma ha alcuni problemi:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

Così il feature-x ramo (changests 40-41) è chiuso, ma c'è una nuova testa, la chiusura del ramo di modifiche 44, che saranno elencati in hg heads ogni volta che:

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

Aggiornamento:Sembra che a partire dalla versione 1.5 Mercurial non mostra i capi di filiali chiuse in uscita di hg heads più.

È possibile chiudere la fusione in un unico ramo, senza lasciare un responsabile di più?C'è più corretto modo per chiudere una caratteristica ramo?

Le domande relative a:

È stato utile?

Soluzione

Un modo è quello di lasciare unita dispongono di filiali sono aperte (e non attivo):

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

Un altro modo è quello di chiudere una funzione di ramo prima di unirli utilizzando un extra di impegnarsi:

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

La prima è la più semplice, ma lascia aperta.Il secondo lascia aperto teste/rami, ma richiede una maggiore ausiliario commesso.Si può combinare l'ultimo commit per la funzionalità di un ramo con questo extra commit utilizzando --close-branch, ma si dovrebbe sapere in anticipo che impegnano sarà l'ultimo.

Aggiornamento:Poiché Mercurial 1.5 è possibile chiudere il ramo, in qualsiasi momento, in modo che non appaiono in entrambe le hg branches e hg heads più.L'unica cosa che potrebbe infastidire è che tecnicamente la revisione grafico sarà ancora un altro revisione senza i bambini.

Aggiorna 2:Poiché Mercurial 1.8 segnalibri sono diventati una caratteristica fondamentale di Mercurial.I segnalibri sono più convenienti per la diramazione di nome rami.Vedere anche questa domanda:

Altri suggerimenti

imho ci sono due casi per i rami che sono stati dimenticato di chiudere

Caso 1:ramo non era unita in default

in questo caso l'aggiornamento per il ramo e fare un altro commit con-vicino-ramo, purtroppo si tratta di una elegge il ramo di diventare la nuova punta e, quindi, prima di spingerlo ad altri cloni fare in modo che la punta vera e propria, che riceve più i cambiamenti e gli altri non confondersi strano suggerimento.

hg up myBranch
hg commit --close-branch

Caso 2:filiale è stata fusa in default

Questo caso non è molto diverso da caso 1 e può essere risolto ripetendo la procedura per il caso 1 e due di quelle aggiuntive.

in questo caso l'aggiornamento per il ramo di modifiche, fare un altro commit con-vicino-ramo e unire il nuovo changeset che è diventato la punta verso il default.l'ultima operazione crea una nuova punta che è nel ramo predefinito - EVVIVA!

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch

Spero che questo aiuta i futuri lettori.

MODIFICA ahi, troppo tardi...So leggere il tuo commento affermando che si desidera mantenere la funzione-x changeset intorno, in modo che l'approccio di clonazione qui non funziona.

Io ancora lasciate che la risposta, qui, può aiutare gli altri.

Se si desidera eliminare completamente funzionalità di "X", perché, per esempio, non ha funzionato, si può clonare.Questo è uno dei metodo spiegato nell'articolo e non funziona, e si parla, in particolare, sulle teste.

Da quanto ho capito e questo e vuole sbarazzarsi di funzionalità "-x" testa una volta per tutte:

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

Quindi, questo:

hg clone . ../cleanedrepo --rev 7

E avrete le seguenti, e vedrete che la funzione-x è infatti andato:

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

Forse ho frainteso quello che volevi, ma per favore non mod giù, ho preso il tempo a riprodurre il tuo caso d'uso :)

È strano che nessuno ancora ha suggerito il più modo efficace di chiusura di una funzione di rami...Si può solo combinare unione di impegnarsi con-vicino-filiale di bandiera (es.commettere i file modificati e chiudere il ramo contemporaneamente):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

Quindi, questo è tutto.Nessuno extra testa revgraph.Nessun extra commit.

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