2012-08-31 10 views
20

Sto creando rami Mercurial denominati per le nuove funzionalità nella mia applicazione, e dopo aver terminato una funzione particolare, unisco tale ramo nel ramo predefinito e chiudo questo ramo di funzionalità.Come eliminare il ramo Mercurial dopo l'unione

Ma mi chiedo se è possibile rimuovere completamente tali rami denominati, senza perdere le modifiche che vengono unite nel ramo predefinito?

risposta

29

No, non c'è.

Quando si uniscono i due rami, il commit di unione dipende dall'esistenza dei due commit principali. Ciò significa che non è possibile rimuovere i commit che compongono il ramo unito, a meno che non si elimini anche il commit unione, che non si desidera eseguire.

Anche questo non è il "modo Mercurial" di fare le cose. Quando un ramo è stato fuso in un altro ramo e non è stato effettuato alcun ulteriore sviluppo su quel ramo, Mercurial riconosce che quel ramo non è più attivo; hg branches metterà quei rami inattivi nella parte inferiore dell'elenco. Si può anche chiudere un ramo utilizzando hg commit --close-branch, che rimuoverà il ramo dalla lista hg branches (a meno che non viene dato il parametro -c).

Sembra che dovresti esaminare le code Mercurial (MQ), perché questo supporta un flusso di lavoro simile a quello che descrivi. Ad esempio, è possibile impostare più code MQ e ognuna di queste rappresenta un ramo di sviluppo.

+7

La tua risposta è quasi perfetto (e ho upvoted esso) ma @lvica dovrebbe guardare i segnalibri prima di MQ. MQ è difficile. È un vero strumento powertool e sta cadendo in disuso ora che le fasi (e presto obsolete) sono qui. I segnalibri, d'altro canto, sono perfetti per le suddivisioni per funzione, in cui i rami denominati permanenti potrebbero essere eccessivi. –

+0

@ Ry4an Sì, me ne sono dimenticato (perché non li ho mai usati). Come gestisci l'eliminazione dopo l'unione con i segnalibri? –

+1

Basta eliminare il segnalibro con 'hg bookmark --delete bookmark_name'. Un sacco di grandi informazioni qui: http://mercurial.selenic.com/wiki/Bookmarks/ –

0

Idea:

Poco prima di spingere il mio ramo della funzione risultante dalla concentrazione di server remoto, ho pensato: "Io non voglio che nessuno conosce il mio ramo, preferirei non è mai esistito". Così ho deciso di mettere tutte le mie modifiche locali in un singolo commit prima di passare al remoto.

Approccio:

  1. clone origine e ramo repository in directory separata:

    hg clone ssh://site//hg/repository repository-origin 
    hg clone /home/user/work/repository repository-branch 
    
  2. merge predefinita e funzione succursali all'interno repository-ramo:

    cd repository-branch 
    hg merge feature-branch 
    hg commit -m "feature-branch: merging into default" 
    cd .. 
    
  3. creare maestro repository:

    hg clone repository-origin repository 
    
  4. sovrascrivere tutti i file in maestro con file repository-ramo (esclusi quelli nascosti):

    rsync -av --exclude=".*" repository-branch/ repository 
    
  5. unire tutti i chan GES da funzione ramo maestro con singola impegnano:

    cd repository 
    hg commit -m "feature-branch: merging into default" 
    
  6. spinta a distanza

Potrebbe essere buono per avere tutte/info alcuni impegna dal ramo indesiderate all'interno l'ultima messaggio di commit.

pro/contro:

  • lavori per rami unpushed
  • zucche impegna una insieme e perde informazione
  • estensioni tenuti
Problemi correlati