我的网站报告 Git 状态(主要是当前提交和分支,还git ls-files --modified
显示已直接在服务器上修改的任何文件),以便我可以一目了然地检查它是否是最新的。这曾经是有效的,但最新的 Git 不允许不拥有该存储库的用户读取这些内容。
该命令git config --global --add safe.directory {$dir}
原则上有效,但是不是为 工作www-data
,因为它没有$HOME
,所以没有地方可以.gitconfig
创建该文件。回应是fatal: $HOME not set
。
有没有什么简单的方法可以让 Apache 读取有关 Git 存储库的一些事实?这是用于exec()
运行诸如git branch --show-current
和git log -1 --pretty=%H
等命令的所有 PHP 代码。
答案1
您可以设置环境变量。因此,设置GIT_CONFIG_GLOBAL
为指向修改后的配置应该可以解决“no-$home 问题”。
使用-c key=value
,您可以单独为每个调用设置配置选项git
,这也应该允许您按照您想要的方式工作。
不过,嗯。看起来,您正在以具有私有文件读取权限的用户身份运行 PHP!或者,您以专用用户身份运行共享存储库,在这种情况下,以该用户身份运行 PHP 解释器似乎更合适。或者,您授予运行 apache 的 PHP 解释器对您的私有文件的读取权限。对于任何公共的东西来说,这基本上是不行的——有一个包装脚本实际上只做一项工作(即,使用正确的选项调用 git,也许还有一个作为参数传递的分支名称),您将其添加到 /etc/sudoers 中,以便您的 PHP作为拥有回购协议的用户,可以 sudo 执行该操作(并且只能执行该操作),但不能以其他方式读取数据,这似乎更明智。
我想补充一点,如果你公开揭露这一点,
exec()
这是用于运行诸如git branch --show-current
和 等命令的所有 PHP 代码git log -1 --pretty=%H
听起来确实有很大的远程代码执行潜力。您可能最好使用一个可以为您完成此操作的库!