Dies ist das Verhalten, das von den Mercurial-Autoren entwickelt wurde: Stellen Sie sich vor, dass Sie Änderungen an einer Arbeitskopie "manuell" vorgenommen haben, wir würden nicht hg import
automatisch den Patch anwenden und sowohl Ihre Änderungen als auch den Patch festschreiben ändert sich mit einer falschen Protokollmeldung und beide Änderungen verschränken sich.
Aus diesem Grund ist die hg help import
sagt:
Because import first applies changes to the working directory, import will
abort if there are outstanding changes.
Der Importbefehl mehr für den Import von Changesets ist (mit metedata wenn die Daten von hg export
kommt) als nur Einspielen von Patches. Wenn Sie eigene Änderungen in der Arbeitskopie haben, können Sie beispielsweise weiterhin hg import --bypass
verwenden und es wird dort kein Fehler auftreten, da das Commit direkt auf das Repository und nicht auf die Arbeitskopie angewendet wird. (Hinweis: Aber wenn Sie nur Ihre Änderungen bestätigen, erhalten Sie zwei Köpfe, die Sie zusammenführen müssen .. :-).
Eine Lösung mit der Kommandozeile für Unix-Systeme ist die direkte Verwendung des Befehls patch
anstelle von hg import
, da dann keine Überprüfung von lokalen Änderungen durchgeführt wird. ZB
for i in 1 2 etc.
do
patch -p1 < patch$i.diff
done
hg commit ...
Für Nicht-Unix-Systeme können Sie auch eine reine Mercurial Lösung haben durch die shelve
Erweiterung zu installieren, ist es in Ihrer globalen Konfigurationsdatei (Mercurial.ini) ermöglicht, und shelve
dann die Verschmelzungen zu handhaben verwenden ein Patch nach dem anderen:
hg import --no-commit patch1.diff
hg shelve
hg import --no-commit patch2.diff
hg unshelve
etc.
Wenn überhaupt würde ein Konflikt auftreten, shelve
wird es erkennen und Sie lösen würden, um es dann shelve
sagen, dass es mit der --continue
Option gelöst.
Ich hoffe, es wird helfen.
über' patch' Befehl: ich habe keine solche Dienstprogramm habe in meinem Quecksilber-Ordner (Windows), reden Sie 'hg Patch'? Wenn ja, habe ich es schon ausprobiert, bevor ich diese SO Frage gestellt habe und sie nur die gleiche Fehlermeldung wie "hg import" gemeldet habe. – tigrou
Es scheint ein 'Linux' Dienstprogramm zu sein, vielleicht installiert' cygwin' es. – tigrou
Ich wusste nicht, dass Sie nicht mit Unix arbeiten, ja 'Patch' ist ein Unix-Programm. Sie können entweder: eine Cygwin-Version verwenden, kopieren, wie Sie erwähnt haben, oder ich denke, Sie können eine "pure-hg" -Lösung haben, ich werde es zu meiner Antwort hinzufügen ..;) –