2016-11-22 36 views
2

У меня есть очень простой pre-commit -hook со следующим кодом в нем:Почему я не могу запустить бродячий ssh ​​в 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 в корне моего проекта и вызова, что с предварительной фиксацией ловушкой.
  • Добавлен абсолютный путь к двоичному двоичному счету в моем привязке до фиксации, но затем я получаю сообщение, что моя виртуальная коробка не работает (хотя это и есть).

ответ

1

Предварительная фиксация работает в собственной оболочке с собственной средой. Он не обязательно разделяет вашу среду, например, ваш PATH или текущий каталог. Вы должны быть явным в своем пред-фиксации. Так что да, вам либо нужно указать полный путь к двоичному файлу vagrant, либо вы должны убедиться, что PATH правильно настроен для среды, которая запускает крюк предварительной фиксации.

Причина, по которой вы получаете сообщение «виртуальное окно не работает» при использовании полного пути, заключается в том, что крюк фиксации не выполняется в том же каталоге, что и ваш Vagrantfile. Ваш Vagrantfile в корне репозитория git. Тогда я ожидаю, что это сработает - см. In a git hook is the current working directory guaranteed to be within the git repository?

Если ваш Vagrantfile находится где-то еще, у вас есть несколько вариантов. Вы можете установить VAGRANT_CWD и дать бродячие подсказку, где ваш Vagrantfile находится (см https://www.vagrantup.com/docs/vagrantfile/) или указать идентификатор запущенного коробки:

vagrant ssh <box-id> ... 

можно использовать

vagrant global-status 

для определения этого идентификатора. Или вы просто убедитесь, что скрипт переходит в каталог Vagrantfile.