SliTaz GNU/Linux official and community documentation wiki.
.png
Translations of this page:

Anwendungen von Mercurial für Fortgeschrittene

Ein externes Programm zum Zusammenführen (merge) benutzen

Wenn mehrere Änderungen an einem Depot sich überlappen und das Ergebnis manuell bestimmt werden muss, kann das Programm meld dazu verwendet werden. Nach der Installation von meld weist man Mercurial durch Eintragen von

[ui]
merge = meld

in ~/.hgrc an, dieses Programm zu verwenden.

Nützliche Erweiterungen

Man kann eine Erweiterung über die Datei ~/.hgrc bekanntgeben. Die Syntax ist:

[extensions]
name = adress

Einige Erweiterungen sind in Mercurial enthalten und benötigen daher keine Angabe einer Adresse, so die vier folgenden:

color In Mercurial Farben verwenden. Das kann nützlich sein, um Unterschiede zwischen Dateiversionen zu visualisieren.

hgext.fetch Das Kommando hg fetch als Kombination von hg pull, hg merge und hg update hinzufügen.

hgext.graphlog Das Kommando hg glog hinzufügen, womit die Versionsverzweigung zusammen mit dem Protokoll angezeigt wird. Es wird empfohlen, den Umfang der Protokollierung mit der Option -l (z.B.: -l 10) einzuschränken. Die Option -p zeigt die Einzelheiten der Unterschiede jeder Änderung.

mq Diese Erweiterung wird nachstehend weiter erklärt. Damit kann eine „patch“-Liste des Mercurial-Depots verwaltet werden; sie bietet die Funktionen Anwenden, Anwenden rückgängig machen, Aktualisieren usw. Diese Erweiterung bietet verschiedene Befehle mit einem Namen, der meistens mit 'q' anfängt. Sucht man im Internet nach mercurial mq, findet man zahlreiche Dokumentationsseiten.

Grundfunktionen von MQ

Anlegen eines „patch“-Depots mit Versionskontrolle in einem Mercurial-Depot; es handelt sich um ein Depot innerhalb eines Depots, in welchem die Änderungen zum „patchen“ mit Hilfe von Mercurial als solche verwaltet werden können:

hg qinit -c

Nach erfolgten Änderungen werden diese als „patch“ gesondert aufgenommen, nicht per commit übergeben:

hg qnew <name_of_patch>

Anzeigen angewendeter und nicht angewendeter „patches“:

hg qseries -v

Änderungen zum aktuellen, gerade bearbeiteten „patch“ aufnehmen:

hg qrefresh

Anwenden des nächsten „patches“ in der Reihe:

hg qpush

Anwenden aller „patches“:

hg qpush -a

Anwenden des aktuellen „patches“ rückgängig machen:

hg qpop

Anwenden aller „patches“ rückgängig machen:

hg qpop -a

Auf einen „patch“ in der Reihe positionieren:

hg qgoto <name_of_patch>

Den aktuellen „patch“ (vor seiner Übergabe) kommentieren:

hg qrefresh -m "Message"

Einen „patch“ in eine Übergabe umwandeln:

hg qfinish <name_of_patch>

Änderungen aus dem „patch“-Depot übergeben:

hg qcommit -m "Übergabekommentar"

Hinweis: „Patches“ werden in .hg/patches gespeichert. Die Datei .hg/patches/series kann manuell bearbeitet werden, um die Reihenfolge der Anwendung der „patches“ zu beeinflussen. Beachten Sie aber, dass dies Probleme verursachen kann, wenn mehrere „patches“ die gleiche Datei als Ziel haben.

MQ & Merge

Grundidee

„Patches“ können leichter mit der merge-Funktion von Mercurial aktualisiert werden als von Hand. Dazu braucht man zwei Merker in dem Depot. Einer davon kümmert sich um die im Depot angewandte „patches“ an der Reihe; der andere um die neuen Übergaben, Aktualisierungen usw.:

o Neue Depotversion
|
|
| o Patches
| |
| /
|
o Depot vor der patch-Anwendung

Die Zweig der „patches“ wird dann dem neuen Zweig hinzugefügt und MQ wird die „patches“ mit der merge-Funktion aktualisieren. Beachten Sie, dass die Verwendung eines externen Programms zum Einmischen (wie das oben vorgeschlagene meld) absolut empfehlenswert ist.

Die „patch“-Reihe anlegen:

qpush -a
hg tags  # Nummer der qparent-Version merken bzw. notieren
qsave -e -c # Status der „patches“ merken, da er später von merge benötigt wird. (Zahl am Ende von patches.N merken oder notieren; ist im allgemeinen 1)

Den neuen Zweig anlegen:

hg update -C <Nummer der Elternreihe qparent> # wie zuvor notiert.
# Dann, je nachdem, was zu tun ist:
# Aktualisieren:
hg pull -u
# Neue Änderungen übergeben, Änderungen durchführen, und dann:
hg commit -m "Kommentar"
# Einen „patch“ editieren:
hg qgoto <name_of_patch> # dann Änderung vornehmen und:
hg qrefresh

Einmischen anstossen:

hg qpush -a -m

Depot bereinigen:

hg qpop -a
hg qpop -a -n patches.N
rm -r .hg/patches.N

Änderungen aus dem „patch“-Depot übergeben:

hg qcommit -m "Aktualisiert auf Version???"

„patch“-Reihe wieder anlegen:

hg qpush -a
 
de/cookbook/advancedhg.txt · Last modified: 2017/09/04 16:18 by hgt