Git Крюки на стороне сервера не работают? - PullRequest
1 голос
/ 16 января 2020

Я новичок в серверных хуках с Git, и я столкнулся с проблемой, когда кажется, что хуки просто не работают вообще. Мое Git репо - это чистое репо.

Все, что я хочу сделать, - это извлечь один файл из репо и записать его на диск в другом месте. Мне не нужен весь архив.

На удаленном (исходном) сервере я создал этот файл и вставил его в /my/path/repo.git/hooks.

#!/bin/sh

# For debugging
echo "HELLO" > /my/path/hello.txt

# Auto-deploy thefile.php to /my/path/ every time something is pushed to this repo
exec git -C /my/path/repo.git show master:thefile.php > /my/path/thefile.php

Я проверил разрешения на крючке:

-rwxrwxr-x 1 webadmin webadmin 543 15 января, 16:27 пост-обновление

Если я вручную запустил скрипт на моем сервере с помощью $ ./path/to/repo.git/hooks/post-update, все отлично работает. hello.txt пишется вместе с thefile.php.

Но когда я делаю sh, мой локальный репо в источник ничего не меняется Я проверяю свои толчки, возвращая последний коммит и нажимая его. Для следующего теста я отбрасываю этот отмененный коммит и заставляю pu sh удалить его из origin/master. Таким образом, есть реальные коммиты с изменениями, которые происходят каждый раз, когда я пу sh. В отчаянии я сделал совершенно новый коммит с произвольным изменением, и это не имело никакого значения.

Я пробовал этот хук как post-update, так и post-receive. Кажется, ни один из них не работает.

Я был бы очень признателен за любую информацию, которую вы, ребята, можете предоставить.

1 Ответ

0 голосов
/ 16 января 2020

Во-первых, убедитесь, что вы нажимаете на «голое» репо, которое, как вы думаете, есть: в этом «голом» репо на сервере выполните git status и git log, чтобы убедиться, что коммиты, которые вы отправляете, действительно существуют. .

Во-вторых, проверьте журнал прослушивателя, который позволяет вам сделать sh пустое репо: S SH или HTTPS.
Если у вас нет прослушивателя HTTP (S) рассмотрите возможность добавления одного для тестирования: самым простым будет gitea ( только один исполняемый файл )

В-третьих, проверьте версию Git на сервере, если она слишком старая.

OP DOOMania c добавляет в комментарии

Вторая часть дала мне подсказку, которая привела меня к реальному ответ:

Я проталкивался через общий ресурс файловой системы (подключенный сетевой диск в Windows), и, очевидно, они не запускают перехваты на сервере, так как нет прослушивателя.

Изменено все, чтобы использовать S SH и теперь он работает. Спасибо!
(Кстати, это также объясняет, почему моя политика "git config noff" игнорировалась.)

...