2

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

我对本地存储库进行更改并提交,然后将 git push 到服务器上的远程存储库在 hooks/post-receive 中,我这样做:

#! /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 访问权限。

4

1 回答 1

1

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

您的部署工作流程有一些不正确的地方。

public_html您应该使用另一个文件夹,而不是直接将文件签出到DocumentRoot. 向世界展示你git repo可能不是你想做的。

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

cd /home/user/git_cache && git checkout -f
cp -RpP /home/user/git_cache/* /home/user/public_html/*
于 2013-10-20T16:39:20.963 回答