【问题标题】:After capistrano deploy, there is no git repo in current pathcapistrano 部署后,当前路径中没有 git repo
【发布时间】:2017-12-19 17:53:19
【问题描述】:

我正在使用 capistrano 3 部署我们的机架应用程序。我们可以按预期部署分支。但是部署后,当我使用所有代码登录到当前文件夹中的服务器时,我看不到 .git。即使我git init,下次部署时,它会再次丢失。无论如何我可以保留 .git 并跟踪我们正在部署的分支吗?谢谢

【问题讨论】:

  • Possibly related 问题。
  • 您是否尝试在current 目录中运行git 命令来了解已部署的分支?
  • 是的,它会说不是 git repo。有时我们直接在服务器中进行更改,很高兴看到已更改的内容。

标签: ruby capistrano capistrano3


【解决方案1】:

current 目录不是 git 工作副本。 Capistrano 故意不包含.git 目录。

可以在current 目录旁边的repo 目录中找到实际的 git 存储库,但我认为这不是您所要求的。听起来您希望能够弄清楚使用哪个分支或 SHA 来部署 current 的内容。

current 旁边还应该有一个名为revisions.log 的文件。如果你tail 它,你可以看到最新的版本,包括分支、SHA 和执行该版本的用户:

$ tail -n 3 revisions.log 
Branch master (at 609bf349776b24f85f85b1950b92314b2d8f3bdc) deployed as release 20170927161115 by mbrictson
Branch master (at 6a77bde58a2de42428b44da669c8f01475d6cd46) deployed as release 20171107004019 by mbrictson
Branch master (at 6d0395ca4067180e0d76735c36b6852691b360ea) deployed as release 20171107011743 by mbrictson

或者,您可以编写自定义 Capistrano 任务以将分支写入特殊文件。例如:

desc "Write the branch to a .branch file in the release that was deployed"
task :write_branch do
  on release_roles(:all) do
    within release_path do
      execute :echo, "#{fetch(:branch)} > .branch"
    end
  end
end

after "deploy:updating", "write_branch"

【讨论】:

  • 感谢您的解释。我们实际上想将当前目录设为.git 目录。看来不可能了。
  • @diwu86 如果您愿意编写一些代码,这是可能的。您可以重新定义git:create_release 任务以执行cp -r 而不是git archive。如果您正在寻找,我可以按照这些思路提供答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2016-01-03
  • 2010-09-06
相关资源
最近更新 更多