Mercurial

Aus Bits'n'Bugs Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Mercurial Repositories via https://erlangen.ccc.de/~USERNAME/hg

Der Webserver ist so konfiguriert, dass Dateien, die unter /home/USERNAME/public_html liegen über https://erlangen.ccc.de/~USERNAME/ aufgerufen werden können. Dies kann genutzt werden um die Mercurial Repositories der Benutzer von Hydra öffentlich zugänglich zu machen. Nutzer, die daran Interesse haben, finden an dieser Stelle eine Anleitung, wie sie ihre Repositories unter der URL https://erlangen.ccc.de/~USERNAME/hg veröffentlichen können.

Verzeichnisse anlegen

mkdir -p ~/public_html/hg/repos
cd ~/public_html/hg
cp /usr/share/doc/mercurial/examples/hgwebdir.cgi ./
chmod 755 hgwebdir.cgi
ln -s ~/public_html/hg/repos ~/hg

Das erstellen des Symlinks im letzten Schritt ist optional, aber man spart sich später Tipparbeit :)

.htaccess

Standardmäßig werden in ~/public_html keine CGIs ausgeführt. Für unsere Zwecke ist aber genau dies erforderlich. Daher muss die Datei ~/public_html/hg/.htaccess mit folgendem Inhalt erstellt werden:

Options +ExecCGI
RewriteEngine On
RewriteBase /~USERNAME/hg
RewriteRule ^$ hgwebdir.cgi [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) hgwebdir.cgi/$1 [QSA,L]
AddHandler cgi-script .cgi

Achtung: In der dritten Zeile USERNAME durch den eigenen Namen ersetzen.

hgweb.config

Im Verzeichnis ~/public_html/hg die Datei hgweb.config erzeugen. Diese Datei teilt Mercurial mit, wo die Repositories zu finden sind.

[collections]
/home/USERNAME/public_html/hg/repos = /home/USERNAME/public_html/hg/repos
[web]
allowpull=true

Auch hier jeweils USERNAME durch den eigenen Namen ersetzen.

Projekte anlegen

Projekte liegen dann in jeweils einem eigenen Verzeichnis unter ~/public_html/hg/repos

  • Ein neues Projekt anlegen
hg init ~/public_html/hg/repos/NEW_PRJ
  • Bestehende Projekte kopieren
hg clone /home/SOMEONE/hg/PRJ_NAME ~/hg/PRJ1
hg clone https://remote.host/~user/hg/blabla ~/hg/PRJ2
hg clone ssh://my.other.machine/hg/repos/foobar ~/hg/PRJ3

In jedem dieser Verzeichnisse sollte die Datei ~/public_html/hg/repos/PRJ/.hg/hgrc in etwa folgengden Inhalt haben:

[web]
contact=USERNAME@erlangen.ccc.de
description=my example project
allow_archive = gz, zip, bz2
style = gitweb

~/.hgrc

Es ist möglich und sinnvoll, eine globale Konfigurationsdatei ~/.hgrc im Homeverzeichnis zu erstellen. Die Einträge in der globalen Konfiguartionsdatei werden durch gleichlautende Einträge in lokalen Konfigurationsdateien "verdrängt". So könnte man beispielsweise für bestimmte Projekte eine abweichende eMail-Adresse angeben. Beispiel:

[ui]
username = Vorname Nachname <username@erlangen.ccc.de>
merge = meld

[defaults]
# suppress noisy extdiff header message
cdiff = -q

[extensions]
hgext.extdiff=
hgext.churn=
hgk=
imerge=
hgext.convert=
hgext.purge=
hgext.record=
hgext.inotify=
#um den Befehl "hg strip" zu aktivieren:
hgext.mq=


[extdiff]
cmd.cdiff = colordiff
opts.cdiff = -uprN

Mit "merge = ..." wird angegeben, welches Programm zum mergen verwendet werden soll. Da Mercurial kein eigenes Merge-Programm mitbringt ist das weglassen dieser Zeile nicht vorteilhaft. Ich habe mich hier für Meld entschieden. Speziell für die KDE-Freunde sei hier "merge = kdiff3" empfohlen. Natürlich muss man das Programm, das man benutzen will vorher auch installiert haben :)

Authentication über https:

Manchmal ist es wünschenswert, ein zentrales Repository zu pflegen, auf das man auch andere Nutzer schreiben lassen kann. Möglich ist dies unter anderem durch "HTTP Basic Auth".

.htaccess abändern

Falls man anderen Leuten erlauben will, das Repo zu verändern, folgendes zur .htaccess hinzufügen:

AuthUserFile /home/USERNAME/public_html/hg/hg-basic-auth
AuthName 'HG Repositories'
AuthType Basic
Require valid-user

hg-basic-auth erstellen

Nun noch die Datei ~/public_html/hg/hg-basic-auth erstellen mit:

htpasswd -b -c -d ~/public_html/hg/hg-basic-auth HGUSER1 PASSWORD

später weitere Benutzer hinzufügen mit:

htpasswd -b -d ~/public_html/hg/hg-basic-auth HGUSER2 PASSWORD

.hg/hgrc anpassen

In die Datei ~/public_html/hg/repos/PRJ/.hg/hgrc dann nach folgende Zeile in den Abschnitt [web] aufnehmen:

allow_push=HGUSER1, HGUSER2

Nachteil: Schreibrechte für alle

Unangenehmerweise muss man dadurch aber das Schreiben für alle lokalen Benutzer auf Hydra gleich mit erlauben:

chmod -R 777 ~/public_html/hg/repos/PRJ

denkbare Work-Arounds

  • Statt Schreibzugriff für jedermann könnte man z.B. den Besitzer des jeweiligen Verzeichnisses in www-data ändern.
    • chown Kann nur von root durchgeführt werden
    • User verliert Möglichkeit lokal zuzugreifen
  • Anlegen entsprechender Unix-Gruppen, in denen jeweils nur die erlaubten Benutzer und www-data sind
    • Gruppen können auch nicht selber angelegt werden, sondern nur von root
    • unübersichtliche Aufsplitterung auf eine vielzahl von Gruppen

Links

Google: Vergleich GIT/Mercurial

Meine Werkzeuge