防止 Git Push live master 更改文件权限和所有权

Prevent Git Push live master from changing file permission and ownership

我已经和这个问题斗争了好几天了...每次我做 git push live master(使用 git post 挂钩)...远程文件权限和所有权正在被每次都更改回默认值,这会使网站上的页面抛出 500 错误。我通常通过 运行ning sudo chown -Rf www-data:www-data /var/www/<Website-Root-Folder> 来解决这个问题,但我希望它永久固定,所以我不必每次都这样做。

我做了以下,我在这里找到:Permissions with Git Post-Receive

sudo usermod -a -G www-data root  // As I'm doing my push using the root user. 

抱歉,我是 git、linux 的新手,不知道还能做什么。如果我在每次推送后都不必 运行 这个 sudo chown -Rf www-data:www-data /var/www/<Website-Root-Folder> 来帮助完成这项工作,我们将不胜感激。

谢谢

您编写了一个脚本,该脚本在某个时候执行 git checkout - 或等效命令 - 实际上在您的目标文件夹中创建和更新文件。

你应该让这个命令是 运行 你想要的用户,例如:

sudo -u www-data git checkout ...

您可能需要设置存储库本身的访问权限,以便用户 www-data 可以 读取 存储库 :

  • 如果您的存储库对所有用户具有 r 访问权限,您就无需再做其他事情了,

  • 您可以决定将该特定存储库中的所有文件组设置为 www-data :

    # in your post-receive script :
    chrgp www-data -R .
    
  • 或在该 repo 的目录上设置 setgid 位,以便在其中创建的文件和目录自动继承该目录的组(而不是用户组):

    # run once on your server, as root user :
    $ chmod -R g+s /path/to/repo.git
    $ chgrp -R www-data /path/to/repo.git
    
    $ ls -ld /path/to/repo.git
    drwxrwsr-x 9 root www-data 4096 janv. 13 14:20 repo.git
          ^
    # notice the 's' in the access rights