я создал голый репозиторий @
/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/
я клонировал репозиторий в корневой каталог и изменил его право собственности,
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
затем проверяя, сработал ли хук и обновление было отправлено в корневую папку,
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'.
В этом конкретном случае использования, как правильно убедиться, что i, ВМЕСТО, всегда будет автоматически заканчиваться
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
к хуку после фиксации, который отлично работает для маленького дерева, но тормозит при каждой фиксации/обновлении, если оно большое (что будет).
возможно, если бы я мог эффективно выделить только текущую фиксацию... ?