Questo è il comportamento che è stato progettato dagli autori Mercurial: immagina di avere modifiche "non eseguite manualmente" in una copia funzionante, non vorremmo che hg import
applichi automaticamente la patch e impegni entrambe le modifiche e la patch cambia con un messaggio di registro errato ed entrambe le modifiche sono impigliate insieme.
Questo è il motivo per il hg help import
dice:
Because import first applies changes to the working directory, import will
abort if there are outstanding changes.
Il comando di importazione è più per l'importazione di modifiche (con metedata quando i dati provengono da hg export
) di patch solo applicando. Se si dispone delle proprie modifiche nella copia di lavoro, ad esempio, è possibile utilizzare ancora hg import --bypass
e non si verificherà alcun errore perché il commit viene applicato direttamente al repository e non alla copia di lavoro. (Nota: ma se commetti solo le tue modifiche, otterrai due teste, che dovrai unire .. :-).
Una soluzione con la riga di comando per sistemi Unix consiste nell'utilizzare il comando patch
anziché in hg import
perché non verrà eseguita alcuna verifica delle modifiche locali. Ad esempio,
for i in 1 2 etc.
do
patch -p1 < patch$i.diff
done
hg commit ...
Per i non-Unix-sistemi è possibile anche avere una soluzione Mercurial pura installando l'estensione shelve
, consentendo nel file di configurazione globale (mercurial.ini), e quindi utilizzare shelve
per gestire le unioni un cerotto dopo l'altro:
hg import --no-commit patch1.diff
hg shelve
hg import --no-commit patch2.diff
hg unshelve
etc.
Se mai si sarebbe verificato un conflitto, shelve
lo identifica e che avrebbe dovuto risolvere poi dire shelve
che è risolto con l'opzione --continue
.
Spero che possa essere d'aiuto.
fonte
2014-10-24 09:50:58
Chi 'comando patch': io non ho queste utilità nella mia cartella mercuriale (finestre), stai parlando' hg patch'? Se è così, l'ho già provato prima di fare questa domanda SO e ho appena riportato lo stesso messaggio di errore di "hg import" – tigrou
Sembra un'utility 'Linux', forse l'installazione di' cygwin' lo renderà funzionante. – tigrou
Non mi sono reso conto che non stavate usando Unix, sì 'patch' è un'utilità Unix. Puoi: usare una versione di Cygwin, usare la copia come hai detto, o penso che tu possa avere una soluzione "puro-hg", la aggiungerò alla mia risposta ..;) –