Git分支基本命令+coding webhook+lnmp
首先介绍一写基本的git操作命令:
- 查看当前项目的远程地址:
- git remote -v
- 查看远程地址所有分支:
- git branch -a 或者 git branch -r
- 查看本地分支与远程分支的映射关系:
- git branch -vv
- 新建分支:
- git branch xxx
- git checkout xxx
- 新建分支,并切换到该分支:git checkout -b issue1
- 当前分支与远程分支创建映射关系(文件跟踪):
- git branch -u origin/addFile 或者
- git branch --set-upstream-to origin/issue1
- 解除映射关系:git branch --unset-upstream
- PS : 本地分支与远程分支可以不同名
- 在本地新建分支,并自动切换到该分支;建立本地分支和远程分支的映射关系:
- git checkout -b 本地分支名x origin/远程分支名x
- 在本地新建分支,不切换到该分支;不建立远程映射关系:
- git fetch origin 远程分支名x:本地分支名x
- git add
- git commit -m "注释"
- 以上两个命令的合并写法:git commit -a -m "注释"
- git push origin 本地分支x:远程分支x
- 分支已有映射关系:git push
- 切换到主分支或者测试分支(master或者develop)
- git checkout develop
- git merge hotfix
- 主分支中执行:
- 获取当前分支状态:
- git status
- 选择解决冲突原始工具:
- git mergetool
- vimdiff (工具解决冲突保存完成层后,确认已解决,自动存入缓存区)或者使用IDE解决冲突后,主动添加到缓存区(git add ./)
- 冲突解决完成后,提交文件:
- git commit
- 删除本地分支:
- git branch -d xxx
- 强制删除:git branch -D XXX
- 删除远程分支:
- git push origin --delete hotfix
- git push origin :br (origin 后面有空格)
- 删除a目录下的2.txt文件
- git rm -r --cached a/2.txt
- 删除a目录
- git rm -r --cached a
- git commit -m "删除a目录下的2.txt文件"
- git push
- Note: 用-r参数删除目录, git rm --cached a.txt 删除的是本地仓库中的文件,且本地工作区的文件会保留且不再与远程仓库发生跟踪关系,如果本地仓库中的文件也要删除则用git rm a.txt
- 本地代码库分支回滚:
- git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除
- git reset --hard HEAD~3:将最近3次的提交回滚
- 远程代码库回滚:
- 这个是重点要说的内容,过程比本地回滚要复杂
- 应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
- 原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
- 操作步骤:
- git checkout the_branch
- git pull
- git branch the_branch_backup //备份一下这个分支当前的情况
- git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id
- git push origin :the_branch //删除远程 the_branch
- git push origin the_branch //用回滚后的本地分支重新建立远程分支
- git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
- 如果使用了gerrit做远程代码中心库和code review平台,需要确保操作git的用户具备分支的push权限,并且选择了 Force Push选项(在push权限设置里有这个选项)
- 使用php执行webhook,注意事项:
- linux下php的执行用户,权限;
- 切记hook操作的目标文件,不要用高权限用户修改或者pull等操作(例root),否则会造成hook失效,后面再思考是否可以避免这样的情况。
- 做钩子大多是走 ssh 协议, 需要coding 里配置部署公钥
- hook前期的配置工作:
- 生成 当前设备、php执行用户 公钥,配置至coding的应用公钥和部署公钥中,可参考coding - ssh公钥生成文档 https://coding.net/help/doc/git/ssh-key.html#i-4
- clone git仓库ssh地址(允许后续hook文件的免密拉取代码操作)
- BTW:如果项目一开始采用https协议克隆代码,可通过:git remote set-url origin <ssh地址> 将https转化成ssh
- 如果使用tortoise git等三方工具,则需替换默认ssh工具到Git执行文件,以tortoise git为例:
<?php
error_reporting(1);
$output = shell_exec('id -a');//判断是否是www:www在执行
$action_user = "<pre>$output</pre>";
file_put_contents('./log/user_action.log',"USER_ACTION::".$action_user.$output. PHP_EOL , FILE_APPEND); $target = '/usr/local/nginx/html/git_work/forecast_admin/forecast'; // 测试环境web目录
$token = 'forecast'; //token校验暂不启用
$wwwUser = 'www';
$wwwGroup = 'www'; $json = json_decode(file_get_contents('php://input'), true);
file_put_contents('./log/user_action.log',"HOOK_DATA::".file_get_contents('php://input'). PHP_EOL , FILE_APPEND); $cmds = array(
"cd $target && git pull origin develop",
"chown -R {$wwwUser}:{$wwwGroup} $target/",
); foreach ($cmds as $cmd) {
$shellExec = shell_exec($cmd); if($shellExec == NULL) {
file_put_contents('./log/test_try2.log', 'shell success'.$cmd, FILE_APPEND);
} else {
file_put_contents('./log/test_try_error.log', 'shell false'.$cmd, FILE_APPEND);
}
}
1.composer cpliakas/git-wrapper
Git分支基本命令+coding webhook+lnmp的更多相关文章
- Git 分支基本命令
1. 查看当前分支 (git branch) 2. 创建分支 (git branch 分支名) 3.切换分支(git checkout 分支名) 4.分支上的常规操作 5.分支的合并 (git che ...
- github webhook 实现代码自动部署 踩坑!! 附加git&coding webhook部署代码
踩坑: 1.php程序执行linux命令是以webserver的user用户(如apache .www……)操作的,需要在/etc/sudoers添加用户免密码操作权限; %apache ALL=(A ...
- php 通过exec 创建git分支失败
今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...
- Git版本控制:Git分支处理
http://blog.csdn.net/pipisorry/article/details/46958699分支的意义创建分支可以避免提交代码后对主分支的影响,同时也使你有了相对独立的开发环境. 假 ...
- Git的基本命令介绍
Git的安装 进入官网下载系统所需要的版本 官网地址:https://git-scm.com/downloads 点击下载按钮官方网站一般会根据操作系统的自动下载所需要的Git版本. 下载完成后,点 ...
- Git版本号控制:Git分支处理
http://blog.csdn.net/pipisorry/article/details/46958699分支的意义创建分支能够避免提交代码后对主分支的影响,同一时候也使你有了相对独立的开发环境. ...
- Git-Runoob:Git 分支管理
ylbtech-Git-Runoob:Git 分支管理 1.返回顶部 1. Git 分支管理 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同 ...
- 【第七篇】- Git 分支管理之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 分支管理 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作. 有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 ...
- Git 分支
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链 分支 指向某一个特定的提交,不同的 ...
随机推荐
- Wix 快速开发安装包程序 (二)安装行为
上一小节,主要介绍了构建最小级别的安装包,这个安装包所做的事情很简单,主要是打包好一些文件,然后放到用户机器的某个位置下面. 这个小节,主要是总结安装过程的各种行为如何使用Wix编写. 一.写注册表 ...
- Java之CheckedException
先来科普一下 CE 到底是什么吧.Java 要求你必须在函数的类型里面声明它可能抛出的异常.比如,你的函数如果是这样: void foo(string filename) throws FileNot ...
- demo Django-基础书籍添加删除(单表)
小demo使用---- 1.pycharm-2019.2 2.python-3.7.2 3.mysql-5.7.25 4.django-2.2.4 使用过程中的一些注意事项和出现的常见错误的解决地址 ...
- Python机器学习及实践 课后小题
目录 第二章 2.3章末小结 @(Python机器学习及实践-----从零开始通往Kaggle竞赛之路) 第二章 2.3章末小结 1 机器学习模型按照使用的数据类型,可分为监督学习和无监督学习两大类. ...
- openlayers图层加标注
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- [HNOI2009]图的同构记数
题意 在所以置换下,本质不同的\(n\)阶图个数 做法 可以假想成\(K_n\),边有黑白两色,黑边存在于原图,白边存在于补图 由于\(n\le 60\),可以手算出拆分数不大,所以我们爆搜置换群 对 ...
- PHPMailer发送邮件遇坑小记
一:phpmailer发送邮件成功了 数据库发送状态也更改 但是用户就是没收到邮件. 出现原因:发送邮件太多 导致邮箱服务器被腾讯封了 发送的邮件统统进入了邮件服务器的草稿箱里. 解决方案: 重新修改 ...
- 推荐7款用于PHP的代码调试工具,太有用了!
当谈论到服务器端的脚本语言时,大多数人都会首先想到PHP.在你写完代码后,使用一些检查方面的工具是非常有必要的,无论是单纯的代码调试工具,还是测试优化工具.下面就为广大的PHP开发者介绍7个专为PHP ...
- 0级搭建类003-CentOS Linux安装 (CentOS 7)公开
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...
- JavaScript-事件类型
DOM3事件类型: 1.UI事件:当用户与页面上的元素交互时触发 a.DOMActivate:元素已经被用户操作激活. b.load:(1)页面完全加载:window触发. (2)所有框架加载完毕:框 ...