通过PHP文件git pull时不使用git config

时间:2012-08-08 11:54:36

标签: php git

我正在尝试从PHP文件git pull,但似乎没有使用配置。

git config --global user.namegit config --global user.email已设置,git pull可从命令行运行。

现在,当我尝试执行此脚本时:

<?php

header('Content-type: text/plain');
system('git pull 2>&1');
echo "\nCompleted!";

我得到以下输出:

  

* 请告诉我你是谁。

     

运行

     

git config --global user.email“you@example.com”git config   --global user.name“你的名字”

     

设置帐户的默认身份。省略 - 全球设置   仅在此存储库中的身份。

     

致命:不允许空身份

     

完成!

可能是因为git config是用户特定的而且PHP是从其他用户运行的吗?

4 个答案:

答案 0 :(得分:2)

只需在git上使用-c标志:

-c <name>=<value>
Pass a configuration parameter to the command. The value given will override values from configuration files. The <name> is expected in the same format
as listed by git config (subkeys separated by dots).

类似于:

git -c user.name=apache pull

应该让你到那儿。添加您需要的任何参数。如果要指定特定文件,则将相关配置选项添加到执行脚本的用户,或者通过exporting a different HOME env variable first.

进行黑客攻击。

答案 1 :(得分:0)

您希望您的网络服务器即使在您未登录时也能正常工作,不是吗?这意味着它由另一个用户运行(除非您另有指定)。除非您通过CLI运行脚本,否则脚本由apache,www-data或您配置的任何用户运行。

答案 2 :(得分:0)

我设法让它工作,但它不是一个理想的解决方案。我需要找到一种方法来为apache用户设置git config一次,而不是每次都。我在共享主机上,所以我不知道它是否真的可能。

<?php

header('Content-type: text/plain');
system('git config user.name "Server"');
system('git config user.email "deploy@server.com"');
system('git pull 2>&1');
echo "\nCompleted!";

答案 3 :(得分:0)

这有点像kludge,但你也可以设置系统git config:

git config --system user.name <user>
git config --system user.email <user>@<domain>

这对于服务器的所有用户来说都是一个非常不幸的副作用,所以它确实不是很好。