wiki:linux/VCS/Mercurial/Configuration

Configuration


Serverseitig

ssh-Zugriff einrichten
'hg update' nach 'hg push' automatisieren
'hg clone' ermöglichen

Lokal

Einträge in <repo>/.hg/hgrc

Einträge in </home/user>/.hgrc

Dateien aus Repository ausschließen


ssh

siehe auch mercurial FAQ: I get an error while cloning a remote repository via ssh

Um via ssh auf ein Repository zuzugreifen, muss in der '~/.bashrc' des Servers folgender Eintrag eingefügt werden:

PATH=$PATH:/home/user/bin

Dadurch findet ssh das 'hg'-Kommando auf dem Server.
Eigenartig, dass '/home/user/bin' in 'PATH' steht, wenn ich mich via ssh auf den Server einlogge, aber nicht, wenn ich via ssh ein Kommando auf dem Server absetze.

auto update

siehe auch mercurial FAQ: 4.21. Any way to 'hg push' and have an automatic 'hg update' on the remote server?

Damit nach übertragenen changesets (push) auf dem Server nicht manuell ein 'hg update' ausgeführt werden muss, kann dies durch folgenden Eintrag in der 'repo/.hg/hgrc' automatisiert werden:

[hooks]
changegroup = /home/user/bin/hg update

checkout via clone einrichten

http-location in Webfaction vorbereiten

  • Das Repository muss dazu in einem Verzeichnis liegen, das via Webfaction 'Static/CGI/PHP'-Application angelegt wurde.
  • Domain anlegen, unter der später via 'hg clone' zugegriffen werden kann, z. B. denkdran.mutetella.org
  • Website mit Domain und damit verknüpfter 'Static/CGI/PHP'-Application, sprich dem Pfad, unter dem sich das Repository befindet, anlegen

Arbeitet serverseitig eine Mercurial-Version > 1.6, sollte die ab Version 1.7 eingeführte 'dotencode capability' deaktiviert werden, damit das Repository auch von kleineren Versionen geholt werden können. Andernfalls tritt die Fehlermeldung

abort: requirement 'dotencode' not supported!

auf, siehe dazu auch Mercurial Wikieintrag, Punkt 2.
Nun sollte mit

hg clone http://denkdran.mutetella.org

das Repository geholt werden können.

<repo>/.hg/hgrc

default-push Verzeichnis

Um ein push per default via ssh auf einem Server abzusetzen, muss in der lokalen '<repo>/.hg/hgrc'-Datei folgender Eintrag stehen:

[paths]
default-push = ssh://user@server.org//path/to/repo

Wird statt 'default-push' nur 'default' verwendet, bewirkt das, dass das dahinter angegebene Ziel nicht nur bei einem

hg push

sondern auch bei

hg pull

verwendet wird.

Weitere push-Ziele lassen sich durch beliebige Zielnamen definieren, z. B. bewirkt der Eintrag

[paths]
anyrepo = ssh://user@server.org//path/to/anyrepo

dass ein

hg push anyrepo

via ssh zum angegebenen Repository übertragen wird.

</home/user>/.hgrc

[ui]

Benutzername

username = <name> <name@mailer.org>

Die Angabe der Mailadresse ist nicht zwingend notwendig.

Erweiterte Meldungen aktivieren

verbose = True

Editor für commits festlegen

editor = vim

[extensions]

log Kommando mit graphischer Anzeige: glog

siehe auch mercurial Wiki: Graphlog

Das dafür nötige Plugin graphlog wird bereits mit mercurial installiert, muss allerdings noch aktiviert werden.

Dazu unter [extensions] folgenden Eintrag zufügen:

[extensions]
hgext.graphlog =

Danach steht das Kommando glog zur Verfügung. Eine umgekehrte Anzeige der Revisionen wie mit log ist damit allerdings nicht möglich.

pager Erweiterung

siehe auch mercurial Wiki: Pager Extension

Daher macht hier die Verwendung des pager Plugins, das ebenfalls mit mercurial installiert ist, Sinn:

[extensions]
pager =

Noch eine Anwendung als pager definieren:

[pager]
pager = less

Somit werden Ausgaben an less gereicht.

Möchte man die Verwendung noch etwas feiner einstellen, lassen sich z. B. mit

[pager]
ignore = update, version

die Ausgaben des update und version Kommandos ohne less bzw. z. B. mit

[pager]
attend = cat, glog

less ausschließlich für die Kommandos cat und glog einsetzen.

hg-prompt Erweiterung

siehe auch Bitbucket: hg-prompt
Steve Losh: hg-prompt project

Wenn das Plugin heruntergeladen ist, diese unter [extensions] registrieren:

[extensions]
prompt = /path_to_plugin/prompt.py

Die Möglichkeiten sind unter der verlinkten Dokumentation beschrieben.

Um den prompt in der Shell zu verwenden, habe ich folgenden Eintrag in die ~/.bashrc aufgenommen bzw. dort die prompt-Einstellung dahingehend geändert:

...
...

#bash colorcodes
DEFAULT="[0m"
BLACK="[0;30m"
RED="[0;31m"
GREEN="[0;32m"
BROWN="[0;33m"
BLUE="[0;34m"
PURPLE="[0;35m"
CYAN="[0;36m"
GRAY="[0;37m"

...
...

#mercurial prompt
#see mercurial `hg-prompt` plugin
#http://stevelosh.com/projects/hg-prompt/
hg_prompt() {
        hg prompt "{status|modified|unknown}[{branch}] " 2>/dev/null
}

if [ "$color_prompt" = yes ]; then
        PS1='${debian_chroot:+($debian_chroot)}\[\033$GREEN\]\u@\h\[\033$DEFAULT\]:\[\033$BLUE\]\w\[\033$DEFAULT\]\n\[\033$BROWN\]\$(hg_prompt)\[\033$DEFAULT\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

...
...

[alias]

Revisionen reverted listen

[alias]
lr = log -r :-1

'diff'-Kommando via 'vimdiff' aktivieren

Nun muss das Kommando 'vimdiff' mit der 'extdiff'-Erweiterung erstellt werden:

[extdiff]
cmd.vimdiff =

'cmd.vimdiff =' ist äquivalent zu 'cmd.vimdiff = vimdiff'.
Wird nach dem Gleichheitszeichen nichts angegeben, verwendet mercurial den Begriff nach dem 'cmd.', in diesem Fall also 'vimdiff'.

Nun kann das hg-Kommando 'diff' mit einem Alias durch das gerade erzeugte 'vimdiff' überschrieben werden, womit bei jedem Aufruf von

hg diff ...

'vimdiff' aufgerufen wird:

[alias]
diff = vimdiff

<repo>/.hgignore

siehe auch mercurial Wiki: .hgignore

Um mercurial anzuweisen, bestimmte Dateien nicht zu berücksichtigen, muss im Verzeichnis des Repositories (nicht im '<repo>/.hg'-Verzeichnis) eine '.hgignore' mit z. B. folgendem Inhalt angelegt werden:

syntax: glob
.hgignore
session
tags
*.pyc
*.swp

Note: hg add hat Priorität! Das heißt, Dateien, die via .hgignore ausgeschlossen sind, werden getrackt, wenn sie über hg add explizit hinzugefügt wurden.

Wenn ich also z. B. das Verzeichnis /secure innerhalb eines Repositories grundsätzlich ausschließe...

syntax: glob
secure/*

eine darin befindliche Datei foo.txt jedoch tracken möchte, füge ich diese explizit an:

hg add secure/foo.txt

Somit werden weiterhin alle Dateien, bis auf foo.txt innerhalb dem Verzeichnis secure ignoriert.

Last modified 4 years ago Last modified on Apr 23, 2015, 9:33:25 AM