专栏首页Alan's Lab不需要钩子,使用 git push 部署网站,

不需要钩子,使用 git push 部署网站,

参考资料

  1. Git 2.3 has been released
  2. Git 2.4 — atomic pushes, push to deploy, and more

正文

最近的工作又回到了微信公众号开发(创业团队摸石头,什么都得干。。。),在办公室的电脑上搞了台测试服务器,代码库放在办公室另一台电脑上。方便起见,打算给产品服务器做一个 push-to-deploy 。

所有自己搭建过 git 服务器的人应该都知道,服务器的 git 仓库一般都是 bare 仓库,没有工作目录。而如果不创建成 bare 仓库的话,对当前 branch 的 push 操作都会被拒绝。

以前做 push-to-deploy 的方式是使用 git 的钩子执行脚本,在收到 push 后临时设置仓库的工作目录,检出代码,然后再清除工作目录。虽然也没什么障碍,但总觉得有些不爽就是了。幸运的是,这种额外的配置在 git 2.3 以后就不再是必须的了。

Git 2.3 引入的新特性

Git 2.3 版本以后,如果你向服务器上有工作目录的仓库 push 改动的话,只要服务器的工作目录是干净的(没有未提交的变更),你 push 的改动就会直接体现在服务器的工作目录下。不需要编写钩子脚本,要实现 push-to-deploy 只需要在服务器的仓库改动一个设置就完事了:

$ git config receive.denyCurrentBranch updateInstead

话说这个配置的命令还真是有够直白,好像都没必要特意去记下它了。。。

配置流程

以上,猴子都能懂的 push-to-deploy 攻略总结如下:

  1. 服务器更新 Git 版本到 2.3 以上(建议 2.4 以上,后文解释)
  2. 服务器在选定的网站根目录新建 Git 仓库,不用 bare 。
  3. 服务器在新建的仓库下执行命令:$ git config receive.denyCurrentBranch updateInstead
  4. 客户端 Git 版本随意,在新仓库或原有仓库中新建一个名为 deploy 的 remote repo ,指向服务器仓库地址:git remote add deploy ssh://gaga@foo.bar/path/to/your/document/root
  5. 客户端向 deploy 分支 push 变更,服务器端工作目录随即改变。
  6. 完事

另外一些可能有用的东西

  1. Git 2.4 对这个特性又做了一些补充,加入了一个仅在该特性被触发时会执行的钩子push-to-checkout。对于一些代码更新后需要额外进行一些操作的项目,这是一个十分贴心的小功能。其他更新详见参考资料 2
  2. 这种方式会在项目根目录暴露包含项目所有历史的 .git 文件夹,如果项目对此比较敏感的话最好谨慎处理。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在 Angular 2 Component 中使用第三方 JS 库

    本文所有内容以 Angular 2 Quick Start 项目为基础,使用 TypeScript 语言。

    Alan Zhang
  • Cordova 是什么

    给两个链接: - webView:shouldStartLoadWithRequest:navigationType: public void addJavas...

    Alan Zhang
  • swift 写 iOS 空心字描边动画

    http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer/ http...

    Alan Zhang
  • Tenacity——Exception Retry 从此无比简单

    Python 装饰器装饰类中的方法这篇文章,使用了装饰器来捕获代码异常。这种方式可以让代码变得更加简洁和Pythonic。

    青南
  • Tenacity——Exception Retry 从此无比简单

    Python 装饰器装饰类中的方法这篇文章,使用了装饰器来捕获代码异常。这种方式可以让代码变得更加简洁和Pythonic。

    青南
  • Android中极简的js与java的交互库-SimpleJavaJsBridge

    最近接触android中js与java交互的东西很多,当然它们之间的交互方式有几种,但是我觉得这几种交互方式都存在一定的不足,这是我决定编写SimpleJava...

    用户2802329
  • Nginx 负载均衡原理简介与负载均衡配置详解

    客户端向反向代理发送请求,接着反向代理根据某种负载机制转发请求至目标服务器(这些服务器都运行着相同的应用),并把获得的内容返回给客户端,期中,代理请求可能根据...

    授客
  • 学界 | DeepMind解密黑箱的第一步:原来神经网络的认知原理和人类是一样的!

    AI 科技评论按:因为AlphaGo而名声大噪的人工智能公司DeepMind近期发表了一篇论文介绍自己在神经网络的解释性问题上最新探索。论文被ICML接受后,D...

    AI科技评论
  • 这是一个铲屎官的故事......

    话说,有一天「铲屎猿」早起之后,发现猫主子竟然没了身影;他找啊找啊,找了好久,可仍然到处都没找到猫主子。这时,客厅突然传来了一声猫叫,铲屎猿循声而至,只见沙发上...

    AI科技评论
  • 展讯sprd_battery.c 充电驱动

    sprd_battery.c 是充电驱动,这个是充电功能的核心内容,电量显示策略、温度检测策略、充电保护机制等功能在这里实现,功能实现与硬件细节剥离,调用通用接...

    233333

扫码关注云+社区

领取腾讯云代金券