php 通过exec 创建git分支失败
今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用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
智能推荐
- 【Git 使用笔记】第一部分:安装git 和 使用git
- 【Git 使用笔记】第二部分:基本命令 和 单分支开发
- Nginx return 关键字配置小技巧
- phpexcel 内存溢出 优化
- 【Composer】实战操作二:自己创建composer包并提交
php 通过exec 创建git分支失败的更多相关文章
- mac下sourcetree创建git分支和合并分支
git默认创建的分支为:master主分支 要实现的效果:新建和合并分支. 1.在master基础上创建分支v1.0.1并切换至v1.0.1然后推送分支到远程服务器 确定即可!! 然后查看远端已经发现 ...
- IntelliJ IDEA 创建 Git 分支并且 Push 到远程
在 IntelliJ 的右下角,你可以看到当前的 Git 分支,然后你可以单击这个分支后,在弹出的界面的最上方有一个新建分支的选项. 然后再弹出的界面中,输入你要创建的分支名称后回车输入. 然后从项目 ...
- IDEA 创建git 分支 拉取分支
此时只是在本地创建好了分支,修改源代码后add,commit将本地分支提交到远程仓库 分支已创建,其它成员此时就可以从git拉分支
- idea创建git分支
此时只是在本地创建好了分支,修改源代码后add,commit将本地分支提交到远程仓库 分支已创建,其它成员此时就可以从git拉分支
- 7.Git分支-分支简介、分支创建、分支切换
1.分支简介 几乎所有的版本控制系统都支持某种形式的分支.使用分支意味着可以把你的工作从开发主线上分离开来,以免影响开发主线.Git的分支是其必杀技,它相对于其它版本控制系统来说,具有难以置信的轻量性 ...
- tortoisegit 7步 学会git分支
tortoisegit 7步 学会git分支 做自己的产品,分支还是很重要的.例如,我发布了一个app,但是有bug,又想做新功能,怎么办呢?如果只在一个git上开发的话,bug会越来越多,原来bug ...
- git创建本地分支以及推送本地分之至远程分支
Git分支策略 实际开发中,应当按照以下几个基本原则进行管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能再上边干活. 那在哪干活呢?干活都在dev分支上,也就是说,de ...
- git使用笔记-git项目的建立及配置、创建子分支及独立分支、分支重命名
一.git的基本使用 1.下载安装git (略) 2.配置gitconfig 配置内容:(主要是你的git的账户信息,提交命令的别名) 3.配置git公钥(输入$ ssh-keygen -t rsa ...
- git分支的创建、删除、切换、合并
需求背景 开发新功能和修改bug一般放在新建分支,如果觉得可行,可以合并到master分支上. 方式 1.查看分支 git branch (查看本地分支及当前所属分支) git branch -a ( ...
随机推荐
- SqlServer2000数据库字典--表结构.sql
SELECT TOP 100 PERCENT --a.id, CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名, C ...
- android上传文件到服务器
package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; i ...
- WPF/Silverlight Template使用及总结(转)
WPF/Silverlight 中的控件都有Style和Template两种属性.前者解释为样式,是用来改变控件原有属性的,比如 Button 控件的(Width,Height,Background ...
- sql按天分组
sql按天分组,这都不会 晕!!!!!!! ) ;
- c#知识总结1
一.C#程序结构 一个c#程序主要包括以下部分 ①命名空间声明 ②一个class ③class方法 ④class属性 ⑤一个main方法 ⑥语句 和 表达式 以及 注释 简单的“Helloworld” ...
- Quartz.net misfire实践
1.问题描述 在使用Quartz.net定时运行作业时,存在一种情况:作业错过了某次执行,当作业恢复的时候应该怎么处理?如:job1在3:50的时候应该执行的,但此刻job1处于暂停状态,而到3: ...
- ural 1273. Tie
1273. Tie Time limit: 1.0 secondMemory limit: 64 MB The subway constructors are not angels. The work ...
- 在线代码格式化,在线JSON校验格式化
在线代码格式化 http://tool.oschina.net/codeformat/json 在线JSON校验格式化 http://www.kjson.com/ 两个好用工具
- CocoaPods 安装的第三方删除
CocoaPods 第三方删除 我们使用CocoaPods非常高效地将一些第三方类库导入到我们的项目中,难免会出现一些错误,这时应怎么删除它呢?以下方法会帮你解决这个问题 打开Build Phases ...
- xfce4桌面自动整理脚本
转自http://blog.chinaunix.net/uid-22101074-id-91073.html (有修改) xfce4桌面没有自动排列的功能,如果文件多了,超出了桌面的范围,就不好找了, ...