GIT :: HOOKS bei jedem PULL ?

NetBull

Erfahrenes Mitglied
Hi,

ich habe vor mich ein wenig in GIT HOOKS ein zu arbeiten. Mein erstes Problem, wie kann ich einen HOOK nach jedem PULL ausführen lassen?

Aktuell habe ich ein repository das ich auf zwei Rechnern bearbeite. Auf beiden läuft LINUX aber der User der im Repository arbeitet muss manchmal nach einem PULL auf allen files/dirs mit einem CHMOD gesetzt werden. Das Script hat nur eine Zeile:
sudo chown www-data:www-data -R /var/www/my-joomla/templates/mytemplate
Nun möchte ich das bei jedem PULL/CLONE ausführen....
Mach ich das per post-merge? (dann würde es nur ausgeführt wenn gemerged wird,.....)

LG NetBu||
 

NetBull

Erfahrenes Mitglied
warum POST? Irgendwie verstehe ich die Begrifflichkeiten manchmal ned... lol Bei POST würde ich erwarten das ich eher was hochlade .... nicht das ich was runter lade....
 

NetBull

Erfahrenes Mitglied
klappt nicht so ganz....

was ist geschehen...

hab mit cygwin auf der windows maschine einfach ne datei hinzugefügt und diese dann geadded, commited und gepushed....

Wenn ich die nun auf der LINUX Maschine pullen würde, bekäme die dort root:root als owner. Nun möchte ich aber den www-data:www-data als owner. Also lege ich unter ~/.git/hooks eine neue Datei an:
Code:
-rw-r--r-- 1 www-data www-data   49 Dec  8 18:40 post-checkout
Inhalt:
Code:
#!/bin/sh
sudo chown www-data:www-data -R ../../

Nun pulle ich und würde erwarten das die Datei dem www-data zugeordnet wird. Nada... Da steht immer noch ROOT...
Code:
-rwxr-xr-x 1 www-data www-data     0 Dec  8 18:34 test1.txt
-rwxr-xr-x 1 www-data www-data     0 Dec  8 18:37 test2.txt
-rwxr-xr-x 1 root     root        24 Dec  8 18:42 test3.txt
test1 und test2 waren manuelle tests.... die hab ich in der Konsole umbenannt...
Wie es scheint wird der hook nicht ausgeführt.
 

NetBull

Erfahrenes Mitglied
Nachtrag: das gleich übrigens auch wenn man es in eine Datei mit dem Namen post-merge packt. Sehe auch nicht das es überhaupt was gemacht hat. Hätte erwartet das ich in der Konsole sehe das ein hook ausgeführt wird.

Code:
me@mosys-dev:/var/www/my-joomla/templates/mytemplate$ sudo git pull
me@mytemplate.de's password:
remote: Zähle Objekte: 3, Fertig.
remote: Komprimiere Objekte: 100% (2/2), Fertig.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ssh://mytemplate.de/git/joomla/templates/mytemplate
   a9b8ce4..3d03e11  master     -> origin/master
Updating a9b8ce4..3d03e11
Fast-forward
test4.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100755 test4.txt
me@mosys-dev:/var/www/my-joomla/templates/mytemplate$ ls -la
total 136
 

NetBull

Erfahrenes Mitglied
Ahhh... gelöst... Die Dateien waren nicht ausführbar.

Hier für alle noch mal:
im Repository muss folgende Datei angelegt werden:
Code:
sudo vi .git/hooks/post-merge
Und das sollte in der Datei stehen:
Code:
#!/bin/sh
sudo chown www-data:www-data -R ../../
eventuell ein anderer User oder eine andere UserGruppe....

Nun noch die Datei mit folgendem Befehl ausführbar machen ;9)
Code:
sudo chmod +x .git/hooks/post-commit

Voila... Nun wird jeder Pull gleich dafür sorgen das die Datei dem user des Webservers zugeordnet ist.

Weis hier noch wer wie man nun den hook für alle clients bereit stellt?
 

LeMike

Grünschnabel
Sehr cool! Das lässt sich von jetzt an sogar für alle künftigen Projekte verwenden, wenn Du dir ein "GIT-Template" anlegst ;)
Habe das selbst im Einsatz und es laufen einige Tests immer im pre-commit hook, damit kein "dreckiger Code" im Repo landet.

git config init.templatedir ~/.git-templates

Im Verzeichnis "~/.git-templates/hooks" packst dann die Skripte rein. Beim nächsten `git clone` oder `git init` sind die dann automatisch dabei :)
 

NetBull

Erfahrenes Mitglied
@LeMike wow. cool... Wie mach ich GIT klar das die HOOKS auch für alle anderen Clients gelten? Oder muss ich die HOOKS einmalig manuell verteilen?