情况如下:
我在ubuntu server 14.04 上面安装了gitlab,来托管项目代码。然后想通过gitlab的web hook 功能来做测试服务器代码自动化更新代码功能。现在遇到一个问题:就是我客户端在master分支上面push代码的时候,我测试服务器的代码目录并没有自动更新。我的shell脚本如下:
!/bin/bash
echo 'haha:::==' >> /tmp/wtz.log
cd /srv/www/bfar-ng
echo 'my name is gitlab'>> /tmp/wtz.log
git checkout master
git pull origin master
echo 'you are so cute!!!::'>> /tmp/wtz.log
查看wtz.log 后发现echo 'my name is gitlab'>> /tmp/wtz.log 和echo 'you are so cute!!!::'>> /tmp/wtz.log 都成功写入到日志文件中。但测试服务器项目原代码就是没有自动更新。除非手动git pull origin master 或者 在终端里面直接执行 上面的shll。它才会更新。
ps:项目目录我都设置777权限了。
求教为啥无法执行git命令。
1
guoer 2015-06-26 12:35:18 +08:00
指定git bin路径
|
2
guoer 2015-06-26 12:35:35 +08:00
which git
|
3
wtz OP which git :
/usr/bin/git 要改成 /usr/bin/git git pull origin master 这样的吗?? |
4
guoer 2015-06-26 12:47:03 +08:00
/usr/bin/git pull origin master
|
5
guoer 2015-06-26 12:47:49 +08:00
或者这样
git=/usr/bin/git $git pull origin master 你要@我 我才能收到通知呀 亲 |
6
wtz OP |
8
lizheming 2015-06-26 13:20:06 +08:00
之前正好搞过这个,主要还是权限的问题,最好用 sudo git pull origin master, 然后参照这个 http://stackoverflow.com/questions/3173201/sudo-in-php-exec 将 PHP 的执行用户加到 sudo 免密输入的列表中...
|
14
odirus 2015-07-08 10:28:06 +08:00
@lizheming
@wtz 请问两位,我现在也是遇到了这个问题,虽然能通过把git用户加入到sudo免密码中解决,但还是有些疑问,因为我在本机能够进行更新,在公司内网服务器也能更新,拿到外网就不能更新了(我们的线上线下环境是统一打包的,所以大体一致的,各文件夹的权限也一致)。主要是 git status 等查询命令能执行, git fetch 等更新命令就是不执行,php中的shell_exec("cd $workpath && git fetch")等更新命令就是执行不了,返回NULL。 stackoverflow 上面有位遇到同样问题的童鞋,不过我的reputation太低了,没法联系他。。。 |
15
tonitech 2015-08-10 21:36:41 +08:00 1
今天我也遇到了同样的问题,我用exec("whoami");之后发现是www这个用户,但是我都已经把www放到/etc/sudoers里面了,真是百思不得其解,最后只能把那个用来执行git branch -a的代码目录直接chown成www。
|