как я могу заставить git / hooks / pre-receive работать, пока мы используем HTTP в качестве протокола доступа

Гуру

Я только что обнаружил, что перехватчики git (предварительное получение, последующее получение) не могут быть запущены при выполнении git-push через HTTP, однако эти перехватчики могут быть вызваны при выполнении git-push через SSH.
Это правильно?
Тогда как я могу заставить git / hooks / pre-receive работать, когда мы используем HTTP в качестве протокола доступа?

/// ----------------------------------------------- ------------------------------------------------- < br> /// @SERVER
/// Это код ловушки после получения

hello.git $ cat hooks/post-receive
#!/bin/bash
while read oldrev newrev ref
do
    if [[ $ref =~ .*/master$ ]];
    then
        echo "Master ref received.  Deploying master branch to production..."
        #git --work-tree=/var/www/html --git-dir=/home/demo/proj checkout -f
    else
        echo "Ref $ref successfully received.  Doing nothing: only the master branch may be deployed on this server."
    fi
done

/// ----------------------------------------------- ------------------------------------------------- < br> /// @ CLIENT
/// Здесь git / hooks / post-receive работает, а git push через SSH.

$ git push
[email protected]'s password:
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 390 bytes | 390.00 KiB/s, done.
Total 5 (delta 1), reused 0 (delta 0)
remote: Master ref received.  Deploying master branch to production...
To hostxxx.net:/var/www/html/repo/hello.git
   a308dbc..82184b8  master -> master

person zhengfish    schedule 26.09.2017    source источник
comment
Какой сервер вы используете для передачи по HTTP?   -  person phd    schedule 27.09.2017
comment
Мы настраиваем один сервер для нашего бизнеса, который находится в Интернете, и из-за ограничений безопасности на прокси-сервере мы должны использовать протокол HTTP / HTTPS вместо SSH. Не могли бы вы дать мне какой-нибудь совет?   -  person zhengfish    schedule 29.09.2017
comment
Да, но что такое сервер? Простой HTTP-сервер определенно не будет запускать обработчики на стороне сервера, вам необходимо настроить https://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html.   -  person phd    schedule 29.09.2017
comment
Возможный дубликат https://stackoverflow.com/questions/26734933/how-to-set-up-git-over-http   -  person phd    schedule 29.09.2017
comment
Заранее спасибо. Я могу проверить это как можно скорее и вернуться к вам.   -  person zhengfish    schedule 30.09.2017
comment
Я сделал это с твоей помощью. Большое спасибо. @кандидат наук   -  person zhengfish    schedule 11.10.2017


Ответы (1)


Следуя руководству @phd, я улучшил конфигурацию apache2, и теперь он работает.

Вот заполненная конфигурация apache2 для вашей справки.

# @file /etc/apache2/conf-enabled/git_http_backend.conf
#
# @brief
#  This conf to enable git accessing via HTTP over apaches.
#
#  Tested on Ubuntu-14.04.5
#
# a2enmod dav dav_fs env alias proxy rewrite proxy_http
#

SetEnv GIT_PROJECT_ROOT         /var/www/html
SetEnv GIT_HTTP_EXPORT_ALL      1
SetEnv REMOTE_USER              $REDIRECT_REMOTE_USER

ScriptAliasMatch \
    "(?x)^/(.*/(HEAD | \
        info/refs | \
        objects/(info/[^/]+ | \
            [0-9a-f]{2}/[0-9a-f]{38} | \
            pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
            git-(upload|receive)-pack))$" \
    "/usr/lib/git-core/git-http-backend/$1"

<Directory "/usr/lib/git-core">
    Options +ExecCgi -MultiViews +SymLinksIfOwnerMatch
    AllowOverride none
    Order allow,deny
    Allow from all
    Require all granted
</Directory>


# disable anonymous accessing /repo/*
<LocationMatch "^/repo/.*">
    AuthType Basic
    AuthName "Git"
    AuthUserFile /etc/apache2/users.htpasswd
    Require valid-user
    Order allow,deny
</LocationMatch>


## foobar.git
<Location /repo/foobar.git>
    Options +ExecCGI
    AuthType Basic
    DAV on
    AuthName "Git"
    AuthUserFile /etc/apache2/users.htpasswd
    Require valid-user

    Order allow,deny
    Allow from all
</Location>

###END###
person zhengfish    schedule 11.10.2017