在服务器上,我有裸存储库,它是开发过程的起源,并简化了到QA环境的部署.
所以post-receive
它根本
GIT_WORK_TREE=/home/dev git checkout -f
Run Code Online (Sandbox Code Playgroud)
但随着产品变得越来越复杂,还应该发生其他一些事情.所以现在它由deploy.sh
脚本处理,脚本也被存储库跟踪.所以我想做的是能够而不是检查整个存储库只是结账deploy.sh
并运行它.我认为这样的东西会起作用:
SOURCE_PATH="/home/dev"
GIT_WORK_TREE=$SOURCE_PATH git checkout deploy.sh
$SOURCE_PATH"/deploy.sh"
Run Code Online (Sandbox Code Playgroud)
但它不起作用给出错误:
error: pathspec 'deploy.sh' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?或者这样做是不可能的?
Von*_*onC 14
正如我在" 仅从git中检出一个文件 "中所解释的那样,如果没有克隆或首先获取文件,则无法仅签出一个文件.
但是你git show
那个文件,这意味着你可以将其内容转储到一个/another/path./deploy.sh
文件中,然后执行该文件.
git-show HEAD:full/repo/path/to/deploy.sh > /another/path./deploy.sh
/another/path./deploy.sh
Run Code Online (Sandbox Code Playgroud)
由于您从post-receive挂钩执行该操作,因此git-show
将显示该deploy.sh
文件的最新版本.
另一种选择是尝试
GIT_WORK_TREE=$SOURCE_PATH git checkout -- path/to/deploy.sh
Run Code Online (Sandbox Code Playgroud)
并直接在工作树中签出该文件.
' --
'帮助git命令理解它是一个文件,而不是像标签或命名分支这样的另一个参数.
从OP AlexKey的测试中,它要求工作树已经(完全)检出至少一次.
归档时间: |
|
查看次数: |
4191 次 |
最近记录: |