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

背景

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

问题

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

想想我们平时是怎么做的呢?

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

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

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

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

解决方案

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

知道原因就好办了,我们也不需要使用cd命令了,直接用--git-dir--work-tree来传入这两个参数即可:

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

未完待续

我不解的是,为什么在控制台里直接cd就可以改变GIT_DIRGIT_WORK_TREE这两个变量呢?求大神指教。

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本片内容转自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃儿阅读 4,956评论 2 88
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 今天凌晨4点19分(相信老薛没意识到这个时间点的邪恶),薛之谦发了微博公开与前妻高磊鑫复合的消息。 现在舆论基本分...
    淘了个怪阅读 310评论 0 1
  • “今天亲手做了小饼干,它相貌一般,却是健康营养。”(wj) 这里是凯西的小书房。感谢您的阅读。敬请关注~~~
    凯西的小书房阅读 224评论 0 1
  • 风 肆虐的紧 撕扯着窗棂 揪扯着屋顶 它哪来的勇气和力量 不知疲惫的扫荡 鸟儿惊恐 瑟缩在铁笼一角 没有根基的小树...
    小蓝很乖阅读 333评论 0 0