2012-08-08 58 views
1

我试图从PHP文件中读取git pull,但好像配置没有被使用。通过PHP文件通过git pull时不使用git config

git config --global user.namegit config --global user.email被设置,git pull从命令行工作。

现在,当我试图执行这个脚本:

<?php 

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

我得到以下输出:

*请告诉我你是谁。

运行

混帐配置--global user.email “[email protected]” 混帐配置 --global user.name “你的名字”

设置您的帐户的默认身份。省略--global仅在此存储库中设置 标识。

致命:空识别码不允许

已完成!

这可能是因为git config是用户specfic而PHP是从另一个用户运行?

回答

2

只需使用-c标志上的git本身:

-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.

+0

谢谢。我正在使用'system('/ usr/bin/env -i HOME =/home/myself git pull 2> &1');''。 – EsTeGe 2012-08-08 13:32:05

0

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

0

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

<?php 

header('Content-type: text/plain'); 
system('git config user.name "Server"'); 
system('git config user.email "[email protected]"'); 
system('git pull 2>&1'); 
echo "\nCompleted!"; 
0

周围破解这有点杂牌组装电脑,但你还可以设置系统混帐配置:

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

这有一个相当不幸的副作用,作为服务器的所有用户的默认配置,所以它确实不是很好。