REM Mount Z:\ as the user with permissions; you may need to add the password
net use z: \\server\share /user:domain\user
REM copy things here
REM ...
REM unmount the drive letter
net use z: /d
Взято из Настройка Smart HTTP для Git на Virtualmin .
Из здесь решением было переключиться с обычного HTTP на Smart HTTP с помощью исполняемый файл git-http-backend, который может выполнять все перехватчики и предположительно намного быстрее.
Скопируйте исполняемый файл git-httpd-backend в каталог / home / domain / cgi-bin / и установите разрешения для домена :домен. Это сделано во избежание проблем с suexec.
$ cp / usr / libexec / git-core / git-http-backend / home / domain / cgi-bin
$ chown домен: домен / главная / домен / cgi-bin / git-http-backend
На /etc/httpd/conf/httpd.conf
добавьте это в VirtualHost для домена:
[...]
ServerName domain.com
[...]
# Установите корневой каталог, в котором находятся репозитории git
SetEnv GIT_PROJECT_ROOT / home / domain / public_html / git
# По умолчанию git-http-backend разрешает push для аутентифицированных
# users, и эта директива сообщает серверу, когда пользователь аутентифицирован.
SetEnv REMOTE_USER = $ REDIRECT_REMOTE_USER
# Экспорт всех репозиториев
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias / dev / / главная / домен / cgi-bin / git-http-backend /
[...]
# Добавьте это, если его еще нет
DAV включен
AuthType Basic
AuthName domain.com
AuthUserFile /home/domain/etc/git.basic.passwd
Требовать действительного пользователя
Удовлетворить все
RedirectMatch ^ / git (/ +) $ /git/gitweb.cgi
RewriteEngine выключен
AddHandler cgi-скрипт .cgi
[...]
А затем перезапустите apache. Теперь все репозитории доступны по адресу http: // gituser@domain.com / dev / git / *
, например, http: // gituser@domain.com / dev / git / reponame .git
, и все хуки будут выполняться должным образом.
В дальнейшем, когда вы создаете новое репо через Virtualmin, вам необходимо выполнить следующие шаги вручную:
Создайте пустой файл / home /domain/public_html/git/reponame.git/git-daemon-export-ok[1123655 visible.
Создайте это как /home/domain/public_html/git/reponame.git/hooks/post-receive
и сделать его исполняемым для всех и принадлежащим apache: domain:
#! / Bin / sh
#
# Пример сценария перехвата для события "post-receive".
#
# Сценарий "post-receive" запускается после того, как receive-pack принял пакет
# и репозиторий обновлен. Передаются аргументы через
# stdin в форме
#
# Например:
# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 ссылки / головы / мастер
#
# образец можно найти в contrib / hooks / или раскомментируйте следующую строку и
# переименуйте файл в "post-receive".
# Эхо клиенту, что вы отправляете почту сейчас
echo "Отправка уведомления по электронной почте ..."
. / usr / share / git-core / contrib / hooks / post-receive-email
# Обязательно обновите информацию о репозитории git на сервере для запросов других клиентов
git update-server-информация
echo "Обновленная информация о сервере."
Согласно по этой ссылке , установите права доступа к каталогу git следующим образом, чтобы избежать проблем с правами записи при отправке новых файлов в коммитах (при этом убедитесь, что сценарий gitweb.cgi доступен только для записи владельцем, чтобы избежать ошибок suexec, которые могут появиться в /etc/httpd/logs/suexec.log):
$ cd / home / domain / public_html / git /
$ chmod -R g + ws *
$ chgrp -R домен *
$ chmod -R gw gitweb.cgi
$ chmod -R gs gitweb.cgi
Обновите /home/domain/public_html/git/reponame.git/config
, чтобы он соответствовал следующему:
[core]
repositoryformatversion = 0
filemode = true
голый = правда
[крючки]
mailinglist = email1@domain.com , email2@domain.com
envelopesender = git-commit@domain.com
emailprefix = "[REPONAME]"