я создал голое репо @
/srv/repos/test
Я установил право собственности на wwwrun: www с установленными битами SUID + GUID
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/
я клонировал репо в webroot и изменил его владельца,
git clone /srv/repos/hub /srv/www/siteA
chown -R wwwrun:www /srv/www/siteA
для удобства определяю пульт
cd /srv/www/siteA
git remote add HUB /srv/repos/hub
затем создайте ловушки после фиксации и обновления после обновления,
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
как мой обычный пользователь, я проверяю 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/
внести изменения, зафиксировать и нажать,
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
затем проверим, что хук сработал и обновление было отправлено в webroot,
ls -al /srv/www/siteA/touch_file
-rw-rw----+ 1 locuse www 0 Mar 7 21:45 /srv/www/siteA/touch_file
файл там - как и ожидалось.
но я хочу не владение пользователем, а именно user = 'locuse', а не user = 'wwwrun'.
в этом конкретном случае использования, как правильно убедиться, что я, INSTEAD, всегда автоматически получу,
ls -al /srv/www/siteA/touch_file
-rw-rw----+ 1 wwwrun www 0 Mar 7 21:45 /srv/www/siteA/touch_file
? то есть все всегда продвигается в / srv / www / siteA только как wwwrun: www.
что-то в крючке, наверное?
я знаю, что могу добавить
chown -R wwwrun:www /srv/www/siteA
к ловушке post-commit, которая отлично работает для небольшого дерева, но затормаживается при каждом коммите / обновлении, если оно большое (что будет).
возможно, если бы я мог эффективно отбить только текущий коммит ...?