как контролировать права собственности на файлы, автоматически помещаемые в целевое репозиторий git с помощью перехватчиков коммитов?

я создал голый репозиторий @

/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

к хуку после фиксации, который отлично работает для маленького дерева, но тормозит при каждой фиксации/обновлении, если оно большое (что будет).

возможно, если бы я мог эффективно выделить только текущую фиксацию... ?

8
задан 8 March 2012 в 16:32
поделиться