【问题标题】:How do I set owner and group on git files on checkout from hooks/post-receive?如何在从钩子/接收后结帐时设置 git 文件的所有者和组?
【发布时间】:2013-10-20 16:24:18
【问题描述】:

在遵循本指南 http://toroid.org/ams/git-website-howto 之后,我正在使用 Git 维护多个网站

我对本地存储库进行更改并提交 然后我 git push 到我服务器上的远程存储库 在钩子/接收后我这样做:

#! /bin/sh
GIT_WORK_TREE=/home/user/public_html/ git checkout -f

这很好用,除了我通过 ssh 以 root 身份推送,所以所有签出的文件都归 root:root 所有。这会导致权限问题。

我目前使用的解决方案是在 post-receive 文件中添加一行,例如:

chown -R user:user /home/user/public_html/*

这很好用,除了将 public_html 中的所有文件设置为 user:user 的明显问题之外,这不一定是想要的,而且可能有点效率低下。它还引入了另一个输入 user:user 错误的机会。

所以:

  1. 有没有办法只设置正在签出的文件而不是public_html中的所有文件?

  2. 有没有办法阻止文件被 root:root 拥有?我必须以 root 身份登录,因为我不想给其他用户 ssh 访问权限。

【问题讨论】:

  • 你不想给其他用户ssh访问权限,但是你给了root权限? oO
  • 不,只有我有root权限

标签: git ssh


【解决方案1】:

我认为将文件推送到git 并不像root 系统用户那样重要。因为git不一定要用system user作为git user

您的部署工作流程有问题。

您应该使用不在DocumentRoot 中的另一个文件夹,而不是将文件直接检出到public_html。将您的git repo 公开给全世界可能不是您想要做的。

我建议你有另一个文件夹/home/user/git_cache

cd /home/user/git_cache && git checkout -f
cp -RpP /home/user/git_cache/* /home/user/public_html/*

【讨论】:

  • git repo 在 public_html 之外,这就是为什么我在推送后结帐到 public_html。请参阅我的问题中的链接
  • 在此之后文件归root拥有一定是有原因的-也许是因为repo归root拥有?我会测试一下
  • 试过了,不管谁是repo的所有者和组,签出到public_html的文件都归root:root所有。
  • 尝试在 git checkout 命令前加上 sudo -u 像这样 'sudo -u user git checkout'
  • 试过了,我得到'对不起,你必须有一个 tty 才能运行 sudo'
猜你喜欢
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 2020-12-19
  • 1970-01-01
相关资源
最近更新 更多