【问题标题】:Why can't I run vagrant ssh in a pre-commit hook?为什么我不能在预提交挂钩中运行 vagrant ssh?
【发布时间】:2016-11-22 09:43:23
【问题描述】:

我有一个非常基本的pre-commit-hook,其中包含以下代码:

#!/usr/bin/env bash
vagrant ssh -c "/var/www/public/tests.sh"

但每当我尝试提交时,我都会收到以下消息:

.git/hooks/pre-commit: line 2: vagrant: command not found

Vagrant 已安装并且正在运行。如果我手动执行命令它可以工作,只有当 Git 尝试运行它时,它才不会。

我已经尝试了以下方法:

  • 在我的项目的根目录中添加一个额外的脚本pre-commit.sh,并从预提交挂钩中调用它。
  • 在我的预提交挂钩中添加了 Vagrant 二进制文件的绝对路径,但随后我收到消息我的虚拟框没有运行(尽管它正在运行)。

【问题讨论】:

    标签: vagrant phpunit pre-commit-hook


    【解决方案1】:

    预提交运行在自己的 shell 中,有自己的环境。它不一定共享您的环境,也就是您的 PATH 或当前目录。您需要在预提交挂钩中明确。所以是的,您要么需要指定 vagrant 二进制文件的完整路径,要么必须确保为运行预提交挂钩的环境正确设置了 PATH .

    您在使用完整路径时收到“virtual box is not running”消息的原因是提交挂钩未在与 Vagrantfile 相同的目录中执行。您的 Vagrantfile 是否在 git 存储库的根目录中。然后我希望它能够工作 - 请参阅In a git hook is the current working directory guaranteed to be within the git repository?

    如果您的 Vagrantfile 位于其他位置,您有几个选择。 您可以设置 VAGRANT_CWD 并向 Vagrant 提示您的 Vagrantfile 所在的位置(请参阅https://www.vagrantup.com/docs/vagrantfile/)或者您指定运行框的 id:

    vagrant ssh <box-id> ...
    

    可以使用

    vagrant global-status 
    

    来确定这个ID。或者您只需确保脚本更改为 Vagrantfile 的目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2014-01-03
      • 2021-08-07
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      相关资源
      最近更新 更多