i creare lo spoglio repo @come controllare la proprietà dei file trasferiti automaticamente su un repository di destinazione git tramite hook di commit?
/srv/repos/test
i impostare la proprietà a wwwrun: www con SUID + bit GUID impostato
chown -R wwwrun:www /srv/repos/hub
chmod ug+s /srv/repos/hub
ls -ald /srv/repos/test
drwsrws---+ 10 wwwrun www 4.0K Mar 7 21:28 /srv/repos/hub/
i clonato il repository per un webroot e cambiato la sua proprietà,
git clone /srv/repos/hub /srv/www/siteA
chown -R wwwrun:www /srv/www/siteA
per comodità, definisco un telecomando
cd /srv/www/siteA
git remote add HUB /srv/repos/hub
quindi creare post-commit e post-aggiornamento ganci per mantenere le cose in sincronia,
vi /srv/www/siteA/.git/hooks/post-commit
#!/bin/sh
git push HUB
vi /srv/repos/hub/hooks/post-update
#!/bin/sh
cd /srv/www/siteA || exit
unset GIT_DIR
git pull HUB master
exec git-update-server-info
come il mio utente normale, ho checkout HUB
whoami
locuse
cd ~
git clone /srv/repos/hub WORK
ls -ald WORK
drwxr-xr-x 10 locuse users 4.0K Mar 7 21:44 WORK/
fare un cambiamento, si impegnano e spingere,
cd WORK
touch touch_file
ls -al touch_file
-rw-r--r-- 1 locuse users 0 Mar 7 21:44 touch_file
git add -A
git commit -m "add test"
git push
poi controllo per vedere che il gancio sparato e l'aggiornamento è stato spinto al webroot,
ls -al /srv/www/siteA/touch_file
-rw-rw----+ 1 locuse www 0 Mar 7 21:45 /srv/www/siteA/touch_file
il file è lì - come previsto.
ma, non è la proprietà dell'utente che voglio, vale a dire utente = 'locuse' non utente = 'wwwrun'.
in questo specifico caso d'uso, qual è il modo giusto per fare in modo che io, invece, avrei fine-up sempre automaticamente,
ls -al /srv/www/siteA/touch_file
-rw-rw----+ 1 wwwrun www 0 Mar 7 21:45 /srv/www/siteA/touch_file
? Ad esempio, tutto viene sempre promosso su/srv/www/siteA solo come wwwrun: www.
qualcosa in un gancio, sto indovinando?
So che potrei aggiungere
chown -R wwwrun:www /srv/www/siteA
al post-commit hook, che funziona bene per un piccolo albero, ma torbiere in ogni commit/aggiornamento verso il basso se si tratta di grandi dimensioni (che sarà).
forse se potessi in modo efficiente chown solo il commit corrente ...?
Si prega di inserire la soluzione in una risposta. A tempo debito puoi accettare la risposta. –
al momento in cui l'ho modificato non mi permetteva di farlo, richiedendo di aspettare altre 6 ore ... –