Frage Gitolitehaken für spezifische Lagerstätte


Ich verstehe nicht, wie ich einen Post-Receive-Hook für eine erstellen Spezifisch Repository in Gitolit (Nicht-Root-Installation)

Mein blankes Repository enthält eine Website, die das Arbeitsverzeichnis in das docRoot kopieren soll (GIT_WORK_TREE=/path/htdocs git checkout -f) beim Update

Vor Gitolit, würde ich nur den Haken für das spezifische Repository aktualisieren.
Gitolite-Dokumentation erwähnt, dass alle Haken sein sollten hooks/common also verstehe ich nicht wie es funktioniert.

Wie sollte der Name der Hooks lauten, wo sollte sie sich befinden und wie sollte sie verändert werden (wenn es sollte)?


11
2017-11-30 08:11


Ursprung


Antworten:


Update Juli 2013: Was folgt, ist für Gitolite V2 (oder "g2"), das war die Version, die vom OP damals (November 2011) verwendet wurde.

Update August 2013, mit dem neuesten Gitolite 3.x: Das hast du jetzt Offizieller spezifischer Repo-Haken:

Es ist im Grunde nur ein Symlink in erstellen <repo.git>/hooks zeigt auf eine Datei im Inneren $rc{LOCAL_CODE}/hooks/repo-specific (außer der gitolite-admin Repo)


Alle Haken ein gitolite/hooks/common werden in allen von Gitolite verwalteten Repositories repliziert, wie in der Dokumentation der Hakenverbreitung.
Das bedeutet, dass Ihr Hook-Skript bestimmte Aktionen ausführen muss, abhängig vom Repo, der den Hook ausführt.

Sie können entweder die $GL_REPO Variable (die gitolite gesetzt und an alle seine Skripte für jeden git-Befehl übergeben wird, den es empfängt).

Oder Sie können eine Git-Konfiguration verwenden, die auf dem Gitolite-Server registriert ist, wie z Spiegelhaken tut es. Siehe die post-receive.mirrorpush Haken.

Das OP Eyal R fügt in den Kommentaren hinzu:

Aber ich verstehe immer noch nicht, wie es gemacht wird (das verstehe ich $GL_REPO wird verwendet, um zu bestimmen, welches Repo ich aktualisiere, aber ich vermisse den praktischen Teil).
  Ich habe eine Datei namens erstellt post-receive.test mit echo "test", leg es rein $HOME/gitolite/hooks/common, lief gl-setup, ran Push von der Workstation - nichts passiert (nein "test" Ausgabe)

Darauf antwortete ich:

Der Haken sollte in der erscheinen hook Verzeichnis Ihres Repos auf dem Gitolite Server als Link, Link zurück zum .gitolite/common/hook. Beachten Sie, dass es in sein sollte $HOME/.gitolite/common/hooknicht /gitolite.

Das OP bestätigt, dass der fehlende Punkt das Problem war.

Der Vorgang zum Hinzufügen eines Hooks ist detailliert in Hakenfortpflanzung in Gitolitund ihre Verwendung inVerwenden von Haken".


8
2017-11-30 09:15



Dies ist eine ziemlich häufige Notwendigkeit für jemanden, der Gitolith verwendet, und scheint ein wenig schwierig zu sein, lose Enden zu binden, wenn er kein sehr fortgeschrittener Benutzer ist (zumindest war es für mich).

Die folgenden Links von stackoverflow und gitolite können ein wenig verwirrend sein. Dies sind meine Schlussfolgerungen und der Weg, den ich gegangen bin, um dies zu erreichen.

Wie bereits @VonC erwähnt, ist das Erstellen von Repository-spezifischen Hooks bereits möglich Version 3.5.3.1 (GitHub-Link)

Aktualisieren / Aktualisieren Sie Gitolite

Das erste, was Sie tun sollten, ist Ihr Gitolite Repo zu aktualisieren. Damit ssh auf Ihrem Server, auf dem Gitolite installiert ist, und wechseln Sie zu dem Ort, an dem Gitolite installiert ist (normalerweise /home/git/gitolite) als Git Benutzer (in der Regel git)

Beispiel:

$ ssh myusername@devserver.com
$ sudo su - git
$ pwd
/home/git
$ cd gitolite

Dann müssen wir Upgrade von Gitolit. Um dies zu tun, müssen wir zuerst das Gitolit-Repository aktualisieren

$ git pull

Dann müssen wir das wiederholen install Befehl (stelle sicher, dass du die gleichen Argumente verwendest wie vorher)

$ ./install

Und schließlich führen Sie das Setup erneut aus.

$ gitolite setup

Wenn das nicht funktioniert, haben Sie gitolite in Ihrem wahrscheinlich nicht installiert PATH, also könntest du so etwas tun:

$ src / gitolite Setup

Gitolite Einstellungen (Die "RC" Datei)

Dies war einer der Teile, die mich am meisten verwirrt haben, aber es endete damit, dass es ziemlich geradlinig war.

Die berühmte "rc" -Datei befindet sich im Home-Verzeichnis von git /home/git/.gitolite.rc. Stellen Sie sicher, dass Sie eine Variable namens haben LOCAL_CODE, sollten Sie so etwas in dieser Datei sehen, wenn nicht, fügen Sie es hinzu.

LOCAL_CODE => "$ENV{HOME}/.gitolite/local"

Und im Abschnitt "Commands to feature to enable" sollten Sie sicherstellen, dass repo-specific-hooks ist verfügbar, wenn nicht, füge es hinzu.

ENABLE => [

    # COMMANDS

        # These are the commands enabled by default
        'help',
        'desc',
        'info',
        ...,
        ...,
        ...,
        'repo-specific-hooks'
        ...,
        ...,
        ...
]

Hier ist der Link zur Dokumentation

Repository-spezifische Hooks schreiben

Endlich in deinem lokal  gitolite-admin Repository erstellen Sie die folgenden Verzeichnisse hooks/repo-specific unter dem Verzeichnis, das Sie gerade eingestellt haben LOCAL_CODE Variable, zum Beispiel:

gitolite_admin/local/hooks/repo-specific

Danach können Sie Ihre hooks-Skripte zu diesem Speicherort hinzufügen und sie über die gitolite conf-Datei verwalten in der Dokumentation angegeben. Stellen Sie sicher, dass die Skripts ausführbar sind.

repo foo
RW+                       =   @all
option hook.post-receive  =   deploy

Ich hoffe, dass dies einigen von euch hilft.

Prost!


3
2018-03-15 00:09