Mercurial Patch-Queue Use Cases
-
29-09-2019 - |
Frage
Ich benutze Mercurial Patches in den folgenden Fällen: -
- Wenn ich muss Pull von einem Remote-Repository und haben hervorragende unbestätigten Änderungen . Dann erstelle ich einfach einen Patch, qpop es, zieht aus der Remote-Repository, und dann wieder den Patch importieren.
- Wenn ich muss Upload Patches reviewboards . Ich habe einfach einen Patch machen und laden Sie es.
Wie sonst verwenden Sie Mercurial Patch-Warteschlangen? Ich glaube, dass es ein sehr mächtige Mercurial Erweiterung und dass ich verwende es nicht in ihrem vollen Potential.
Lösung
Der Mercurial Wiki hat ein guten Abschnitt auf Anwendungsfälle:
Zusammenfassung:
- Speichern des aktuellen Status der Arbeitskopie, so dass Sie leicht, um es auf später rückgängig machen können
- eine „verwirrte Arbeitskopie“ Verhindern, dass - wenn man auf halben Weg durch eine Änderung und will etwas zu ändern sonst
- Geben Sie wandelbar, umsortierbaren Commits, so dass Sie ‚Geschichte‘ einfach nur direkt vor drängen bekommen kann.
Andere Tipps
Sie haben nicht wirklich Mercurial Patches für diese benötigen. Wenn Sie hervorragende Uncommited Änderungen haben, wenn Sie ziehen, werden sie mit der Spitze zusammengefügt werden.
Beispiel:
C:\>hg init db
C:\>cd db
C:\db>echo >file1
C:\db>echo >file2
C:\db>echo >file3
C:\db>hg ci -Am codebase # Create a code base with 3 files.
adding file1
adding file2
adding file3
C:\db>echo a change >>file2 # Outstanding change to file2.
C:\db>hg st
M file2
An dieser Stelle werden wir die Datenbank klonen und eine Änderung zu übernehmen, dass wir ziehen können.
C:\db>hg clone . \db2
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
C:\db>cd \db2
C:\db2>echo a change >>file3
C:\db2>hg ci -m "file3 change" # Commit a change to file3.
Zurück in der ursprünglichen Datenbank ...
C:\db2>cd \db
C:\db>hg st # Still have uncommitted change
M file2
C:\db>hg pull \db2
pulling from \db2
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
C:\db>hg st # We have the new history, but haven't updated.
M file2 # file2 has uncommitted change.
C:\db>type file3 # file3 is unchanged.
ECHO is on.
C:\db>hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
C:\db>hg st # We've updated, and file2 *still* has
M file2 # uncommitted change.
C:\db>type file2
ECHO is on.
a change
C:\db>type file3 # But file3 now has committed change
ECHO is on. # that was pulled.
a change
Die Moral ist, können Sie einfach ziehen und zu aktualisieren, auch mit unbestätigten Änderungen. Wenn es merge Konflikte sind, normal merge Verhalten tritt auch.
Für Patch-Export hg export <rev>
werden Patches exportieren für die Überprüfung.
Wenn Sie eine Patch-Warteschlange auf Bitbucket erstellen, listet es einige der häufigsten Anwendungen für die Patch-Warteschlangen im rechten Fensterbereich. Ihre Erklärung ist sehr gut und beantwortet Ihre Frage direkt. Zitate von ihm sind unten.
Patch-Warteschlangen sind gut für:
Die Entwicklung Funktionen, die Sie für die Upstream-Rezension zu verfassen beabsichtigen
Da Patches in Patch-Warteschlangen modifiziert werden, bieten sie eine ideale Möglichkeit, eine Funktion in einem entwickeln Geschichte verfolgt Art und Weise, während nach wie vor so dass Sie leicht integrieren Feedback
Das Experimentieren mit einer neuen Funktion des Hinzufügen
Patch Warteschlangen Krempel nicht Ihre Projekt der Geschichte, so können Sie sicher nutzen sie als eine Möglichkeit, schnell ausprobieren eine Idee, und es in der Version halten Kontrolle, ohne unübersichtlich Projektgeschichte mit gescheitert Ausflüge. Wenn Sie sich entscheiden, die halten Experiment, man kann leicht ein drehen Patch-Warteschlange in eine Reihe von traditionellen Mercurial Commits
Die Aufrechterhaltung private Anpassung für ein anderes Projekt
Da Patch-Warteschlangen sind nicht Teil das offizielle Änderungsprotokoll für ein Projekt, sie sind ideal für private Aufrechterhaltung Anpassungen für einen Upstream Projekt. Zum Beispiel könnten Sie Aufrechterhaltung eines Patch-Warteschlange, die Marken Programm eine bessere Integration mit Ihrem Unternehmens-Workflow
Patch-Warteschlangen sind nicht gut für
Langlauf Zweige
Da Patch-Warteschlangen sind hoch flüchtig, sie einen schlechten Job Tracking tun die langfristige Geschichte Ihrer Quelle Code. Aus diesem Grund langer Laufzeit Zweige, wie beispielsweise diejenigen, die entsprechen Produkt-Releases, sollten gehalten werden, in Repositories oder dem Namen Zweige.
Konzernentwicklung
Patch Warteschlangen verfolgen nicht merge Geschichte, die ihnen ein schlechter macht Wahl für Gruppenentwicklung zu tun, wo Sie wirklich wollen, um zu sehen, wenn ein gegebener Satz von Funktionen wurde verschmolzen zu ein Repository. Wenn Sie Zweifel haben, können Sie bleiben sollte zu einem traditionellen Gabel, aber die Beherrschung der Macht der Patch Warteschlangen werden Sie enorme geben Flexibilität in Ihrem Workflow und bieten Ihnen stark verbessert Zusammenarbeit Fähigkeiten.
MQ ist ein großes Werkzeug gleichzeitige Entwicklung zu verwalten. Blatant Selbst Plagiat und Eigenwerbung aus meiner eigenen Antwort :
3 Verwenden MQ mit einem Patch (oder mehrere aufeinander folgenden Patches) pro Projekt.
- Pros:. Einfach und leicht
- Nachteile: muss vor dem Schalten qrefresh und den Wiederaufbau nach; knifflig und riskant, wenn Projekte nicht orthogonal.
4 Verwenden Sie einen MQ Zweig pro Projekt.
- Vorteile: extrem flexibel und skalierbar (für die Anzahl gleichzeitiger Projekte)
- Nachteile: muss qrefresh und qcommit vor dem Schalten und den Wiederaufbau nach; fühlt sich kompliziert.