Git Крючок под Windows
У меня есть следующий код для проверки в рабочем каталоге в hook post-receive:
#!/bin/sh
git --work-tree=d:/websites/__gitweb --git-dir=d:/_gitrepo.git/ checkout -f
К сожалению, он не работает. Однако команда работает, когда я ввожу именно это в командной строке Windows (cms):
git --work-tree=d:/websites/__gitweb --git-dir=d:/_gitrepo.git/ checkout -f
Я проверил разрешения и исполняемые атрибуты, но ничего.
UPDATE:
Думаю, я приближаюсь. Теперь я знаю, в чем проблема, но я не знаю, почему это происходит. Крюк фактически запускается, но я получаю это сообщение:
remote: Starting copy from repository to work tree...
remote: fatal: Not a git repository: 'd:/_gitrepo.git/'
remote: Finished.
Я попытался изменить путь d: на весь сетевой путь, но он все еще не работает. Если я иду в удаленный репозиторий, и я делаю журнал git, изменения там, и если я запустил hook с sh, это сработает.
Почему это говорит о том, что это не репозиторий git, когда это ясно?
Ответы
Ответ 1
Наконец-то я получил работу!
Это действительно странно. Мне пришлось набрать pwd
, чтобы увидеть, где находится фактическая партия, и указала местоположение крюка на сервере. Однако в следующей строке я добавил hostname
, и он показал мне свое местное имя хоста.
Затем я добавляю весь путь так же, как:
#!/bin/sh
echo "Starting copy from repository to work tree..."
pwd
hostname
git --work-tree=//remotehost/d$/Webseiten/__gitweb --git-dir=//remotehost/d$/_gitr
epo.git checkout -f
echo "Finished."
Я надеюсь, что это решение будет работать для кого-то
Ответ 2
Для оболочки script (и эти скрипты hook будут выполняться как оболочка, даже в Windows, через msys-уровень msysgit), вы можете использовать различный путь:
#!/bin/sh
git --work-tree=/d/websites/__gitweb --git-dir=/d/_gitrepo.git/ checkout -f
См. также другие возможности с помощью Преобразование пути Posix в MinGW"