2015-04-07 15 views
5

Quando si invoca hg unshelve --keep e si verifica un conflitto, è necessario risolvere il conflitto e quindi richiamare nuovamente hg unshelve --continue --keep. Perché è necessario l'ultimo passaggio? E perché non posso invocare direttamente hg unshelve --continue --keep senza risolvere il commit - per uscire dallo stato di non-cancellazione?Utilizzare "hg unshelve" come la rimozione di Git

c:\temp\hg test>hg st 
M new.txt 

c:\temp\hg test>hg commit -m "fjdjkfs" 

c:\temp\hg test>hg unshelve --keep 
unshelving change 'shelve' 
adding changesets 
adding manifests 
adding file changes 
added 1 changesets with 1 changes to 1 files (+1 heads) 
merging new.txt 
warning: conflicts during merge. 
merging new.txt incomplete! (edit conflicts, then use 'hg resolve --mark') 
unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') 

c:\temp\hg test>hg st 
M new.txt 
? new.txt.orig 

c:\temp\hg test>hg unshelve --keep --continue 
abort: unresolved conflicts, can't continue 
(see 'hg resolve', then 'hg unshelve --continue') 

c:\temp\hg test>hg resolve --mark 

c:\temp\hg test>hg unshelve --keep --continue 
no changes needed to new.txt 
unshelve of 'shelve' complete 

c:\temp\hg test>hg st 
warning: ignoring unknown working parent 11667b875a2d! 
? new.txt.orig 

risposta

0

Perché è l'ultimo passo necessario?

Perché è possibile che non tutte le modifiche siano state ancora applicate. Il conflitto di unione può verificarsi a metà dell'operazione di annullamento. In questo caso, è necessario passare il controllo a Mercurial per applicare le modifiche rimanenti.

E perché non riesco a invocare hg unshelve --continue --keep direttamente senza risolvere il commit - per uscire dallo stato di annullamento?

Se si desidera solo uscire dallo stato unshelving, e non si preoccupano di applicare correttamente le modifiche nella directory di lavoro, si dovrebbe solo fare hg unshelve --abort. Il flag --continue serve per riprendere la cancellazione dopo aver risolto i conflitti di unione. Mercurial non ti permetterà di farlo senza risolvere i conflitti perché questo lascerebbe la tua directory di lavoro in uno stato rotto.

Vedere hg help unshelve per ulteriori informazioni su questi argomenti.

+1

Non capisco il tuo primo argomento. In che modo Git o SVN possono gestire i conflitti per tutti i file? Neanche io capisco il tuo secondo argomento. Voglio applicare lo shelving, ma tenerlo - non importa se ho dei conflitti o no. A Unshelve non dovrebbe importare se risolvo i conflitti o meno. Lascia solo il repository in uno stato ("unshelving") rotto perché gli sviluppatori Hg lo hanno implementato in quel modo. IMHO questo stato è inutile. –

+0

Questo non è un forum per argomenti. Sto spiegando come funziona davvero Mercurial, non cercando di giustificarlo. Se vuoi delle giustificazioni, portalo alla mailing list o qualcosa del genere. – Kevin

+1

Non riesco a uscire dallo stato di non shelving mantenendo le modifiche non eliminate usando il suggerito 'hg unshelve --abort'. Elimina solo tutti i cambiamenti parzialmente non modificati. –

1

Questo sembrava essere un problema con la versione Mercurial che stavo usando. Con l'ultima versione 3.4 funziona come previsto.