Capistrano + Git - "unable to find" [commit SHA]

3
我在配置工作站使用Capistrano部署项目时遇到了问题, 它是一个我之前在客户内部开发的PHP项目。我们使用Capistrano+Git没有遇到任何问题。
现在我正在尝试重新访问该项目,并设置工作站以通过github访问代码并通过Capistrano将其部署到客户服务器。
我在我的工作站和客户服务器上都可以轻松连接到github,我可以执行SSH -vT git@github.com在我的工作站上并获得预期的成功结果。
同样,我也可以登录到服务器并执行命令来验证服务器是否可以访问github.com。
在工作站方面,我可以轻松地克隆、拉取和推送代码。
然而,当我尝试运行capistrano部署脚本时,脚本在尝试执行第一次fetch(或clone)时出错,并显示“无法找到[提交SHA哈希]”的错误。
自从上次从客户办公室部署以来,部署脚本并没有更改。
以下是cap deploy的输出:
  * 2012-11-14 18:52:34 executing `dev'
  * 2012-11-14 18:52:34 executing `setbranch'
  * 2012-11-14 18:52:34 executing `deploy'
  * 2012-11-14 18:52:34 executing `deploy:update'
 ** transaction: start
  * 2012-11-14 18:52:34 executing `deploy:update_code'
    updating the cached checkout on all servers
    executing locally: "git ls-remote git@github.com:XXX123/reponame.git master"
    command finished in 2490ms
  * executing "if [ -d /home/serverusername/dev.site.com/code/shared/cached-copy ]; then cd /home/serverusername/dev.site.com/code/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 8d28f09e2b85ebac6da912-github-commit-sha && git clean -q -d -x -f; else git clone -q git@github.com:XXX123/reponame.git /home/serverusername/dev.site.com/code/shared/cached-copy && cd /home/serverusername/dev.site.com/code/shared/cached-copy && git checkout -q -b deploy 8d28f09e2b85ebac6da912-github-commit-sha; fi"
    servers: ["server.alias"]
    [server.alias] executing command
 ** [server.alias :: out] error: unable to find 8d28f09e2b85ebac6da912-github-commit-sha
 ** fatal: object 8d28f09e2b85ebac6da912-github-commit-sha not found
    command finished in 1681ms
 *** [deploy:update_code] rolling back
  * executing "rm -rf /home/serverusername/dev.site.com/code/releases/20121115025239; true"
    servers: ["server.alias"]
    [server.alias] executing command
    command finished in 293ms
failed: "sh -c 'if [ -d /home/serverusername/dev.site.com/code/shared/cached-copy ]; then cd /home/serverusername/dev.site.com/code/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 8d28f09e2b85ebac6da912-github-commit-sha && git clean -q -d -x -f; else git clone -q git@github.com:XXX123/reponame.git /home/serverusername/dev.site.com/code/shared/cached-copy && cd /home/serverusername/dev.site.com/code/shared/cached-copy && git checkout -q -b deploy 8d28f09e2b85ebac6da912-github-commit-sha; fi'" on server.alias

我最初在Windows Vista电脑上尝试设置时遇到了这个问题。认为是Windows的问题后,我设置了一个Ubuntu虚拟机,很快就启动了,并且出现了同样的结果。

有人能提供帮助吗?

(我已经更改了输出代码中的一些名称,以保护客户隐私。)


git reset -q --hard 8d28f09e2b85ebac6da912-github-commit-sha 看起来不正确,应该是 git reset -q --hard 8d28f09e2b85ebac6da912。你能找到这个字符串是在哪里构建的吗? - berkes
如果您尝试通过Capistrano的shell从git拉取代码会发生什么? - CDub
1个回答

2
我同意berkes的观点,你的cap配方可能正在寻找错误的SHA值,但由于你报告说它没有改变,我会提出这个可能性,因为最近发生了这种情况:
确保SHA仍然存在于分支上。
我们重写了一些历史记录,以前的SHA不再在repo中。我会通过git log查找SHA。创建一个丢弃的分支并重置到SHA可能更快,git checkout -b lost_sha && git reset --hard 8d28f09e2b85ebac6da912。如果没有找到SHA,Git会发出警告。
你的脚本可能没有改变,但repo已经改变了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接