资讯专栏INFORMATION COLUMN

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

Vultr / 3031人阅读

摘要:仓库挂在上,而提供功能,可以在指定事件根据自动部署这一用途,这里指的当然主要是事件了发生后,发一个请求到指定来触发更新。

背景

今天琢磨着利用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这两个变量呢?求大神指教。

参考资料

getting “fatal: not a git repository: "."” when using post-update hook to execute "git pull" on another repo

git --git-dir not working as expected

git(1) Manual Page

Git系列之二 --- git-dir & work-tree

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22483.html

相关文章

  • Electron入门介绍

    摘要:本文主要讲解的入门。可以帮助我们管理包的下载依赖部署发布等。可以认为是中的。后续使用中,全部替换为即可。命令根据它,自动下载所需模块用于创建窗口和处理系统事件安装包的位置。 Electron是什么 可以认为Electron是一种运行环境库,我们可以基于此,用HTML、JS和CSS写桌面应用。PC端的UI交互,主要有web应用和桌面应用。具体采用哪种方式,主要看系统的应用场景,哪个更合适...

    wing324 评论0 收藏0
  • 2018 年了,你还是只会 npm install 吗

    摘要:无需手动拷贝文件或者创建软链接到目录,有更优雅的解决方案。这是因为识别协议的,得知这个包需要直接从文件系统中获取,会自动创建软链接到中,完成安装过程。 nodejs 社区乃至 Web 前端工程化领域发展到今天,作为 node 自带的包管理工具的 npm 已经成为每个前端开发者必备的工具。但是现实状况是,我们很多人对这个nodejs基础设施的使用和了解还停留在: 会用 npm insta...

    libxd 评论0 收藏0
  • Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Ngi

    摘要:容器运行时,会打印一条信息消息并退出。因此,更好地做法是将需要使用的用户加入用户组。涉及到了两条指令,和。执行命令指令是用来执行命令行命令的。 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松! 无论是应用开发者、运维人员、还是其他信息技术从...

    fyber 评论0 收藏0
  • Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Ngi

    摘要:容器运行时,会打印一条信息消息并退出。因此,更好地做法是将需要使用的用户加入用户组。涉及到了两条指令,和。执行命令指令是用来执行命令行命令的。 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松! 无论是应用开发者、运维人员、还是其他信息技术从...

    seanHai 评论0 收藏0

发表评论

0条评论

Vultr

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<