Я использую Git Bash в Windows 7. Для своего проекта я установил VirtualBox и Vagrant в Windows.В моем домашнем каталоге есть несколько папок проекта, которые синхронизируются с бродячей машиной на основе nfs.Поэтому Vagrant будет поддерживать синхронность файлов.
Коробка представляет собой веб-сервер на основе debian / contrib-jessie64 с некоторыми конфигурациями, такими как Git, для нескольких пакетов, устанавливаемых через Composer.Git предназначен для целей BitBucket только потому, что некоторым пакетам требуется разрешение ssh.Но сам Git никогда не используется мной в коробке, потому что он очень медленный.Кроме того, Git требуется для прослушивания нескольких хуков.На веб-сервере установлены PHP и Composer, а на моем хост-компьютере (Windows) - нет.Причина, по которой я не установил все это в Windows, заключается в том, что все версии остаются одинаковыми как на хост-компьютере, так и на гостевой.Я хочу, чтобы сервер делал для меня все php, и это нормально.
Итак, работа с Git в Windows требует, чтобы git-хуки были настроены как в Windows, так и для коробки.Все хуки, которые слушают изменения в Windows, выполняют соответствующие хуки в окне vagrant.Разумеется, все аргументы передаются по конвейеру.
Это мой файл предварительной фиксации в Windows
#!/usr/bin/env bash
coreDirectory="$HOME/projects/foo"
arguments=""
for arg in "$@"
do
arguments="$arguments $arg"
done
cd $coreDirectory && vagrant ssh -c "cd /home/projects/foo &&
./.git/hooks/pre-commit $arguments"
Это прекрасно работает.Файл предварительной фиксации в окне выполняется и запускает специальный Executor, который вызывает файл ./vendor/bin/phpcs для анализа кода.
Я хочу запускать правила анализа кода только для промежуточных файлов,поэтому все измененные или неотслеживаемые файлы, которые были добавлены в область сцены, должны быть проанализированы.Это тоже отлично работает.Исполнитель подготавливает все файлы с помощью следующей команды:
git -C /home/projects/foo diff --name-only --diff-filter=AM --cached
В Windows добавление нужных файлов в промежуточную область с помощью git add --all и их фиксация работает должным образом и ловушка предварительной фиксациизапускает ловушку предварительной фиксации в поле, которое запускает CodeSniffer.
Но использование git commit -am "Foo bar" не работает должным образом с приведенной выше командой.Хук реагирует, но команда Executor внутри машины, которая пытается получить файлы --cached, возвращает пустой набор.
Я предполагаю, что либо окно vagrant недостаточно быстрое, чтобы переместить измененные файлы в промежуточную область после того, как я использовал команду git commit -am в Windows или команду git commit -am даже не перемещает файлы в промежуточную область.
У вас есть идеи?