Ich denke darüber nach, ein 14 Jahre altes Lebenslauf-Repository (Geschichte intakt) auf mercurial zu migrieren. Ich glaube, ich habe alle technischen Konvertierungsaufgaben erledigt, aber ich habe noch einige Fragen zur effektiven Arbeit mit Quecksilber.
Eines der Dinge, die ich häufig in den Lebenslauf-Sandboxen einzelner Entwickler (einschließlich meiner eigenen) sehe, sind lokale, nicht festgeschriebene Änderungen, die nicht bereit sind, auf die Hauptlinie übertragen zu werden. Mein Verständnis ist, dass dies eine schlechte Sache ist. Die meisten meiner Experimente mit hg legen nahe, dass nicht festgeschriebene Änderungen eine schlechte Sache sind. Die Unfähigkeit, mit ihnen zu verschmelzen, reicht dafür aus. Ich möchte also wissen, wie andere Leute, die Quecksilber in der täglichen Codierung verwenden, damit umgehen. Wie gehen Sie mit unvollständigen Codeänderungen um, wenn es darum geht, Ihr Repository zu aktualisieren? Wie gehen Sie mit lokalen Änderungen um, die Sie (noch) nicht mit anderen Entwicklern teilen möchten?
Es gibt ein paar Dinge, die ich hinzufügen werde.
Eine besteht darin, einen Workflow vorzuschlagen , bei dem das Regal , das standardmäßig mit TortoiseHg geliefert wird , mit Bedacht verwendet wird .
Wann immer ich einen Teil meines aktuellen Arbeitsverzeichnisses festschreiben wollte, habe ich die Änderungen, die ich nicht festschreiben wollte, zurückgestellt, neu kompiliert (um sicherzustellen, dass ich keine Bits zurückgestellt habe, die jetzt zu einer fehlerhaften Kompilierung führen) und dann meine Tests ausgeführt . Dann würde ich das vollständige, funktionierende und getestete Set festlegen. Schließlich würde ich unshelve ausführen, um meine Änderungen wiederherzustellen.
Wenn ich dauerhaftere Änderungen hätte, z. B. wenn eine Konfigurationsdatei auf meinem Entwicklungscomputer immer auf den lokalen Host-Port 3333 und nicht auf den Produktionsserver verweisen soll, würde ich die Verwendung der Mercurial Queues-Erweiterung in Betracht ziehen, die sowohl mit Mercurial als auch mit TortoiseHg geliefert wird .
quelle
Ich glaube nicht, dass unverbindliche Änderungen an sich eine schlechte Sache sind. Sie verweisen auf eine "Unfähigkeit, mit ihnen zusammenzuführen". Wenn Sie eine nicht festgeschriebene Änderung an einer Datei vorgenommen haben und eine Änderung an dieser Datei abrufen und aktualisieren, startet Mercurial den Zusammenführungsprozess so, als hätten Sie ihn festgeschrieben und danach gefragt eine Zusammenführung. Meinten Sie etwas anderes?
Für lokale Änderungen, die Sie noch nicht mit anderen Entwicklern teilen möchten, haben Sie zwei Ansätze. Die erste besteht darin, die Änderungen in Ihrer Arbeitskopie beizubehalten, aber nicht zu verschieben, und die andere darin, sie aus der Arbeitskopie herauszulegen. Welche Sie auswählen, hängt davon ab, ob Sie diese Änderungen während der Arbeit zur Verfügung haben möchten.
Wenn Sie sie in der Arbeitskopie behalten, funktionieren eingehende Änderungen einwandfrei. Sie müssen also nur vermeiden, ausgehende Änderungen zu erstellen, und das bedeutet, dass Sie sie nicht festschreiben müssen. Wenn die Dateien neu sind, ist das einfach - nur nicht
hg add
. Wenn sie bereits verfolgt werden, können Sie sie ausdrücklich von Commits mit ausschließenhg commit --exclude foo.txt
. Wenn Sie eine große Anzahl von Dateien ausschließen müssen oder diese von vielen Commits ausschließen möchten (z. B. für eine dauerhafte Änderung einer lokalen Konfigurationsdatei), sehen Sie sich die Ausschlusserweiterung an .Wenn Sie bereit sind, die Änderungen beiseite zu schieben, haben Sie andere Optionen. Am einfachsten ist es,
hg diff
die Dateien zu verwenden, um einen Patch zu erstellen, der sie beschreibt, den Sie an einem sicheren Ort aufbewahren, undhg patch --no-commit
diesen Patch dann erneut anzuwenden, wenn Sie die Änderungen zurückhaben möchten. Sie können dies reibungsloser gestalten, indem Sie die Regalerweiterung , die Dachbodenerweiterung oder einen anderen Verwandten installieren . Sie können auch die Warteschlangenerweiterung verwenden , aber dazu wird ein Vorschlaghammer verwendet, um eine Nuss zu knacken. Sie können die Änderungen sogar einfach festschreiben, dann auf das übergeordnete Element zurücksetzen und dort andere Arbeiten festschreiben, wobei die Änderungen in einem stumpfen anonymen Zweig verbleiben -hg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')
obwohl dies möglicherweise einfacher manuell durchzuführen ist!). Sie müssten dann jedoch darauf achten, diesen Änderungssatz nicht zu verschieben.quelle
Zwei grundlegende Ansätze werden verwendet, um Entwicklungsströme zu trennen.
Benannte Zweige. Die Idee ist, dass Sie an Ihrem eigenen Zweig arbeiten, dem nmichaels_branch_of_awesome. Auf diese Weise können Sie Ihre Änderungen vornehmen, ohne die Arbeit anderer zu beeinträchtigen. Dann verschmelzen Sie mit anderen Personen, wenn Sie deren Arbeit benötigen, und wenn die Zeit für die Funktion gekommen ist, wechseln Sie zur Integration in den stabileren Zweig. Ich bevorzuge benannte Zweige.
Anonymer Klon. Dadurch wird ein separates Repository für Ihre Sandbox erstellt. Hier spielen Sie herum, bis Sie das bekommen, was Sie wollen, dann machen Sie (wahrscheinlich) einen MQ-Patch für Ihre Commits und schieben Sie dorthin, wo Sie angefangen haben. Ich mag diesen Ansatz nicht so sehr, da er eine Verzeichnisverwaltung und möglicherweise MQ-Arbeit erfordert, was schwierig sein kann. Und mit einigen Repos können sie dafür anfangen, nur ein wenig groß zu werden. Dies scheint jedoch von den Ofenentwicklern bevorzugt zu werden.
quelle