在脚本中调用git命令:指定git命令运行上下文

背景

今天琢磨着利用git来作服务器自动部署。git仓库挂在coding.net上,而coding.net提供webhook功能,能够在指定git事件(根据“自动部署”这一用途,这里指的固然主要是push事件了)发生后,发一个请求到指定URL来触发更新。php

问题

因为我本人用的是php,因此天然是php接收到coding.net的请求后,执行一段shell命令来启动git拉取代码。这一部分仍是比较顺利的,问题是,启动git拉取代码的shell命令要怎么写呢?git

想一想咱们平时是怎么作的呢?web

$ cd /xxxx/xxx #进到git项目目录
$ git pull #拉取代码

嗯,看起来很简单,那咱们shell命令也这么写吧。shell

fatal: Not a git repository (or any of the parent directories): .git

哎?!这是什么状况,我路径都是对的啊,怎么会找不到.git目录?bash

解决方案

在stackoverflow一番搜寻后,寻得问题缘由:git命令依赖于环境变量GIT_DIRGIT_WORK_TREE,这两个环境变量才是git真正的运行上下文。而在shell命令里直接执行cd是不会跟着改变这两个环境变量的,所以,就可能发生上述的错误。服务器

知道缘由就好办了,咱们也不须要使用cd命令了,直接用--git-dir--work-tree来传入这两个参数便可:post

$ git --git-dir='/xxx/xxx/.git' --work-tree='/xxx/xxx' pull # 注意这两个参数是传给git命令的,要放在'git'的后面

未完待续

我不解的是,为何在控制台里直接cd就能够改变GIT_DIRGIT_WORK_TREE这两个变量呢?求大神指教。.net

参考资料

相关文章
相关标签/搜索