2010-03-09 16 views
6

Supponiamo che:Come 'hg unire' senza influenzare la directory di lavoro?

  • Ho un repository chiamato MyRepo.
  • Ho modifiche non eseguite nella mia directory di lavoro.
  • Faccio un pull da Repo1 e questo crea un ramo in MyRepo
  • Voglio fare unire quello che avevo già nel mio repository con quello che ho appena tirato.

Come descritto here, il processo di unione cambia lo stato della directory di lavoro.

Nel mio scenario, non voglio perdere le modifiche senza commit che sono nella mia directory di lavoro perché a quel punto, mi interessa cambiare lo stato di MyRepo; non lo stato della mia directory di lavoro.

C'è un modo per passare attraverso il processo di fusione, compresa la risoluzione dei conflitti manualmente, senza influenzare il contenuto della mia directory di lavoro? Questo processo può essere eseguito solo in file temporanei? O dovrei accantonare i miei cambiamenti, fare l'unione e poi unshelve per ripristinare la mia directory di lavoro allo stato che era prima dell'unione?

risposta

4

Utilizzare le estensioni shelve o attic per memorizzare temporaneamente le modifiche mentre si uniscono.

+0

I tuoi collegamenti sono rotti. –

1

È possibile clonare il repository all'ultimo checkin, unire le modifiche con il clone, eseguire il commit e quindi estrarre il nuovo changeset dal repository clonato in quello corrente.

3

Non puoi farlo. Come dice la documentazione, l'unione è in realtà un'operazione di funzionamento ad albero. Risolvere i conflitti senza testare il risultato è pazzesco. O accantonare o commettere le modifiche e quindi fare l'unione. Se non si desidera che il commit sia visibile ovunque, è possibile confermare la modifica, aggiornare la revisione precedente, unire il nuovo ramo, applicare la patch temporaneamente impegnata e rimuovere quel ramo temporaneo.

+0

+1 alla scaffalatura. Sembra il modo più semplice per procedere alla fusione senza influire sulle modifiche in corso. – gavinb

+0

Grazie a Lukáš Lalinský, sto riscontrando un problema simile. Quando hai detto "o accantonare o eseguire il commit delle modifiche e quindi fare l'unione", con "shelve" intendevi "utilizzare l'estensione shelve"? o qualcos'altro? –

+0

Sì, intendevo usare l'estensione shelve. –

0

Sono abbastanza nuovo da mercurio, ma non potresti clonare dal tuo repository locale e copiare la tua copia di lavoro sul clone? Potresti quindi eseguire l'unione nell'originale? Conserveresti lo stato della tua copia di lavoro nel clone pur essendo libero di consentire il cambio della copia di lavoro dell'originale.

Testare prima questo. Non l'ho mai fatto in hg.

0

Basta farlo in un clone.

  1. Clone miorepo a miorepo-fusione, che tirerà su tutti i cambiamenti impegnati, ma non le modifiche non salvate
  2. All'interno miorepo-fusione fare un pull da Repo1.
  3. All'interno miorepo-fusione fare tutto il hg merge s che si desidera
  4. spinta
  5. All'interno miorepo-fusione sia Repo1 o miorepo originale

Spingendo indietro al miorepo non modificherà il dir di lavoro di miorepo, così questa è un'azione sicura.

Ricorda in Mercurial che i cloni sono incredibilmente veloci ed economici - su file system moderni usano hardlink sotto le copertine quindi non occupano molto spazio sul disco.

Problemi correlati