我创建了一个简单的回购@
/srv/repos/test
Run Code Online (Sandbox Code Playgroud)
我将所有权设置为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/
Run Code Online (Sandbox Code Playgroud)
我将回购克隆克隆到了一个webroot,并改变了它的所有权,
git clone /srv/repos/hub /srv/www/siteA
chown -R wwwrun:www /srv/www/siteA
Run Code Online (Sandbox Code Playgroud)
为方便起见,我定义了一个遥控器
cd /srv/www/siteA
git remote add HUB /srv/repos/hub
Run Code Online (Sandbox Code Playgroud)
然后创建post-commit和post-update挂钩以保持同步,
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
Run Code Online (Sandbox Code Playgroud)
作为我的普通用户,我结账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/
Run Code Online (Sandbox Code Playgroud)
做出改变,承诺和推动,
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
Run Code Online (Sandbox Code Playgroud)
然后检查钩子是否被触发并且更新被推送到webroot,
ls -al /srv/www/siteA/touch_file
-rw-rw----+ 1 locuse www 0 Mar 7 21:45 /srv/www/siteA/touch_file
Run Code Online (Sandbox Code Playgroud)
文件就在那里 - 正如预期的那样.
但是,它不是我想要的用户所有权,即它的用户='locuse'而不是user ='wwwrun'.
在这个特定的用例中,什么是确保i,INSTEAD始终自动结束的正确方法,
ls -al /srv/www/siteA/touch_file
-rw-rw----+ 1 wwwrun www 0 Mar 7 21:45 /srv/www/siteA/touch_file
Run Code Online (Sandbox Code Playgroud)
?即,所有内容总是被提升为/ srv/www/siteA 仅作为wwwrun:www.
钩子里的东西,我猜?
我知道我可以添加
chown -R wwwrun:www /srv/www/siteA
Run Code Online (Sandbox Code Playgroud)
post-commit hook,对小树很好用,但是如果它很大(它会是),每次提交/更新都会出现问题.
也许如果我能够有效地只是当前的提交...?
小智 6
这工作,
vi /srv/repos/hub/hooks/post-update
#!/bin/sh
cd /srv/www/siteA || exit
unset GIT_DIR
- git pull HUB master
+ git fetch HUB master
+ files=`git diff ..FETCH_HEAD --name-only --diff-filter=ACMRTUXB`
+ git merge FETCH_HEAD
+ for file in $files
+ do
+ sudo chown wwwrun:www $file
+ done
exec git-update-server-info
Run Code Online (Sandbox Code Playgroud)
chown只对标识为在提交集中的文件执行 - 小而快.
归档时间: |
|
查看次数: |
6912 次 |
最近记录: |