Я пытаюсь заставить git post-receive работать в Windows.
Я использую Git 1.7.9 (Msysgit) и имею локальное репо и пустое репо на удаленном сервере. Я могу получить, зафиксировать, отправить и т. Д. Я установил хук после получения, который должен извлекать файлы в рабочую папку (часть процесса развертывания), но, похоже, он не работает.
Вот что я делаю:
- Изменить файл, подготовить и зафиксировать его
- Push на удаленный сервер - успешно
- Ожидайте увидеть эхо - не видите эхо
- Проверить рабочую папку на сервере - там нет последних файлов
- Войдите на сервер и запустите скрипт подключения вручную - последние файлы извлекаются в рабочую папку.
Я изменил ловушку, чтобы она ничего не делала, кроме вывода сообщения, и я прочитал, что должен увидеть это в своей консоли после нажатия. Но это не отображается, поэтому я могу только предположить, что крючок не сработал.
Я проталкиваю HTTP с помощью git dot aspx на сервере, обрабатывающем запрос и выполняющим локальную загрузку через графический интерфейс. После того, как это не удалось, я попробовал Bonobo, и ловушка не работает при нажатии через графический интерфейс или консоль bash.
Я предполагаю, что у кого-то это работает где-то, но после двух дней поиска все, что я нашел, это решения, которые не помогают, или люди с той же проблемой, которая осталась без ответа.
(кстати, я новичок в стиле git).
Приветствие.
Обновление
Я начинаю думать, что это может быть связано с разрешениями - но разрешениями Unix, а не NTFS. Когда @eis упомянул разрешения, я принял NTFS. Но после дальнейших исследований кажется, что Git в Windows все еще проверяет наличие файлов Unix.
Так что я подозреваю, что проблема в том, что файл после получения не является исполняемым, как когда я делаю ls -o
, это -rw-r - r-- (644, я полагаю). Если я попытаюсь изменить это через bash и chmod 777 post-receive
, тогда сделайте ls -o
, разрешения будут такими же.
Странно, что, как только я отредактировал post-receive (с помощью notepad ++), бит выполнения удаляется. (мой тестовый скрипт, заканчивающийся на .bat, сохраняет свои исполняемые биты ...)
Кстати, пользователь, в который я вошел, является владельцем файлов (согласно ls -o
), но я не могу установить права доступа.
Становится действительно запутанным сейчас. Я что-то упускаю действительно очевидное?
Обновление 2
Ни chmod 777 post-receive
, ни chmod a+x post-receive
не работают. Я взял новый чистый файл пост-получения, загрузил его на сервер и проверил разрешения, и он выполнил. Если я переименую файл (чтобы удалить образец) в Windows, то выполнение будет удалено. Если я делаю это в bash с mv
, выполнение сохраняется.
Но всякий раз, когда я редактирую файл (в Windows или в bash с помощью vi), выполнение удаляется.
Итак, проблема теперь в том, почему он удаляет биты выполнения при редактировании файла?
Надеюсь, это последнее препятствие и причина его неисполнения ...