今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的

新建分支命令如下

git fetch --all
git checkout -b pmt_20160624_v10.7.4 origin/master 
git push origin pmt_20160624_v10.7.4:pmt_20160624_v10.7.4

php大概代码如下,执行这个php文件是定时执行的

<?php

$cmd = [
    "cd /data/xxx",
    "git fetch --all",
    "git checkout -b pmt_20160624_v10.7.4 origin/master",
    "git push origin pmt_20160624_v10.7.4:pmt_20160624_v10.7.4"
];
exec( implode(" ; ",$cmd),$outputs );
var_dump( $outputs );

奇怪的是 分支创建成功了,但是push 去没有成功,打印出来的内容也没有提示什么错误,排除了半天没查到原因

开始我在$cmd中加了一个调试命令,ssh git@xxxxx,我是怀疑没有加入ssh key 导致的

$ ssh git@xxxxx
PTY allocation request failed on channel 0
Welcome to GitLab, vincent!
Connection to xxxxx closed.

但是通过php执行exec执行出来的命令提示是

Welcome to GitLab, robot!

发现 是不同的用户,一个是vincent,一个是robot,其实这个时候如果比较敏感的就知道什么问题了,后来我也是想到这点才解决的

后来我想办法将 push的命令提示打印出来了

git push origin pmt_20160624_v10.7.4:pmt_20160624_v10.7.4  --progress > /tmp/release.log 2>&1

提示错误信息如下

GitLab: You are not allowed to push code to this project.
fatal: Could not read from remote repository. Please make sure you have the correct access rights
and the repository exists.

我猛然想起来了,我是没有给robot账号 权限哇,我们git使用gitlab搭建的

重点回顾

git把自己的输出 放到了  STDERR not STDOUT ,所以需要重定向下,才有了如下命令

git push origin pmt_20160624_v10.7.4:pmt_20160624_v10.7.4  --progress > /tmp/release.log 2>&1

原文地址:php 通过exec 创建git分支失败
标签:exec   git   php   push

智能推荐

php 通过exec 创建git分支失败的更多相关文章

  1. mac下sourcetree创建git分支和合并分支

    git默认创建的分支为:master主分支 要实现的效果:新建和合并分支. 1.在master基础上创建分支v1.0.1并切换至v1.0.1然后推送分支到远程服务器 确定即可!! 然后查看远端已经发现 ...

  2. IntelliJ IDEA 创建 Git 分支并且 Push 到远程

    在 IntelliJ 的右下角,你可以看到当前的 Git 分支,然后你可以单击这个分支后,在弹出的界面的最上方有一个新建分支的选项. 然后再弹出的界面中,输入你要创建的分支名称后回车输入. 然后从项目 ...

  3. IDEA 创建git 分支 拉取分支

        此时只是在本地创建好了分支,修改源代码后add,commit将本地分支提交到远程仓库          分支已创建,其它成员此时就可以从git拉分支

  4. idea创建git分支

        此时只是在本地创建好了分支,修改源代码后add,commit将本地分支提交到远程仓库            分支已创建,其它成员此时就可以从git拉分支

  5. 7.Git分支-分支简介、分支创建、分支切换

    1.分支简介 几乎所有的版本控制系统都支持某种形式的分支.使用分支意味着可以把你的工作从开发主线上分离开来,以免影响开发主线.Git的分支是其必杀技,它相对于其它版本控制系统来说,具有难以置信的轻量性 ...

  6. tortoisegit 7步 学会git分支

    tortoisegit 7步 学会git分支 做自己的产品,分支还是很重要的.例如,我发布了一个app,但是有bug,又想做新功能,怎么办呢?如果只在一个git上开发的话,bug会越来越多,原来bug ...

  7. git创建本地分支以及推送本地分之至远程分支

    Git分支策略 实际开发中,应当按照以下几个基本原则进行管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能再上边干活. 那在哪干活呢?干活都在dev分支上,也就是说,de ...

  8. git使用笔记-git项目的建立及配置、创建子分支及独立分支、分支重命名

    一.git的基本使用 1.下载安装git (略) 2.配置gitconfig 配置内容:(主要是你的git的账户信息,提交命令的别名) 3.配置git公钥(输入$ ssh-keygen -t rsa ...

  9. git分支的创建、删除、切换、合并

    需求背景 开发新功能和修改bug一般放在新建分支,如果觉得可行,可以合并到master分支上. 方式 1.查看分支 git branch (查看本地分支及当前所属分支) git branch -a ( ...

随机推荐

  1. HDU 4349 Xiao Ming's Hope lucas定理

    Xiao Ming's Hope Time Limit:1000MS     Memory Limit:32768KB  Description Xiao Ming likes counting nu ...

  2. 不自动生成Android Dependencies的解决方式

    今天遇到的奇怪问题是网上下载的demo导入第三方包运行后Android: NoClassDefFoundError的错误,原因是第三方的jar包并没有打包进apk里,运行是肯定要出错的. 网上百度了N ...

  3. 如何开启SQL Server 2008的远程联机

    需要开启SQL Server 2008 远程联机,需按如下操作步骤执行: 1.首先需要在{程序}-{Microsoft SQL Server 2008}-{配置工具}-{SQL Server 配置管理 ...

  4. dedecms创建或修改目录失败

    并且后台修改系统参数无法写入! 原因是:文件夹无写入权限!

  5. 思维 UVALive 3708 Graveyard

    题目传送门 /* 题意:本来有n个雕塑,等间距的分布在圆周上,现在多了m个雕塑,问一共要移动多少距离: 思维题:认为一个雕塑不动,视为坐标0,其他点向最近的点移动,四舍五入判断,比例最后乘会10000 ...

  6. 2015ACM/ICPC亚洲区长春站 A hdu 5527 Too Rich

    Too Rich Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  7. Gap

    Gap Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  8. 升级到WP8必需知道的13个特性

    http://www.cnblogs.com/sonic1abc/archive/2012/11/28/2792467.html   Windows phone 8 SDK 已经发布一段时间了, 已经 ...

  9. 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0<n<=32, 0<=d<=16) ...

  10. Android环境搭建要点

    1.JDK环境变量配置 在环境变量的path变量中加入jdk安装目录的bin路径字符串(C:\Program Files\Java\jdk1.8.0\bin). 配置好后,在命令提示符界面输入&quo ...