Хук пост-получение не работает после pu sh из локального в удаленное хранилище - PullRequest
1 голос
/ 17 января 2020

Описание проблемы:

У меня проблема с автоматическим запуском ловушки post-receive в репозитории git. После выполнения pu sh из локального в удаленное хранилище ловушка post-receive просто не выполняется.


Шаги, которые я сделал:

  1. Я создаю (non-bare) хранилище на локальном компьютере и создаю несколько коммитов
  2. Я создаю хранилище на удаленном компьютере (bare), создаю ловушку post-receive и устанавливаю его для chmod на 755
  3. На локальном компьютере я добавляю удаленный репозиторий (git удаленное добавление .....)
  4. Я делаю pu sh, который работает правильно
  5. Крюк, к сожалению, не срабатывает

Мои окружения:

  • Локальный компьютер: GIT 2.25.0.windows.1 @ Win10 (1909)
  • Удаленный компьютер: GIT 2.25.0 @ Debian 8.11 (jessie)

Содержимое файла пост-получения на удаленном компьютере:

#!/bin/sh
git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f

  • Примечание: Когда я запускаю этот код непосредственно из консоли s sh, он отлично работает

Другие решения SO? :

Да, я много видел, но никто не решил моя проблема. Я видел некоторые ответы с советом "unset GIT_DIR", но, боюсь, это не имеет к этому никакого отношения, потому что даже echo test > log.txt не работает в post-receive. Похоже, post-receive не может быть запущен?

1 Ответ

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

Хорошо, я обнаружил, в чем проблема - раздел на хосте смонтирован как noexec. Если это так, перехватчики не могут работать.

Это по соображениям безопасности. Это типичная ситуация на виртуальном хостинге.


Мое альтернативное решение:

Мы можем создать псевдоним git, где вы можете запустить скрипт bash с регистрацией s sh и выполните команду git непосредственно на сервере

Как это сделать?

В файле конфигурации локального репозитория мы добавим псевдоним:

[alias]
    run = "!sh ./hook.sh"

(как видно из примера, этот псевдоним запускает ловушку. sh файл)

Теперь мы создадим ловушку. sh файл с git команды

#!/bin/bash

ssh user@host -p [port] 'bash -s' <<-EOF
    git --work-tree=/home/xxxxxx/xxxxxx/public_html/prod --git-dir=/home/xxxxxx/xxxxxx/dev.git checkout -f
    exit
EOF

А теперь нам просто нужно использовать команду git run

Примечание. Это простой пример. Вы должны проверить это в своей среде!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...