Я использовал модуль git VirtualMin для настройки частного git через http на одном из моих серверов. У меня есть другие серверы с git через ssh, но это была моя первая попытка настроить его через http и с VirtualMin.
К сожалению, в последние несколько часов я обнаружил, что модуль VirtualMin по умолчанию не использует интеллектуальный режим http и не ретранслирует в DAV для отправки коммитов на сервер. Что мне не очень нравится.
Также я попытался переместить свои старые репозитории на этот сервер, и я не могу их использовать, потому что нет файла / info / ref. (Я также слышал, что в режиме smart http мне не нужен этот файл)
В результате я попытался найти документ об установке smart git http и нашел много. Но я не думаю, что какой-либо из них совместим с VirtualMin или его модулем git по умолчанию,
Кто-нибудь из вас знает, как мне нужно настроить установку моего git и параметры Apache, чтобы использовать интеллектуальный протокол http, не повредив VirtualMin, и при этом быть совместимым с VirtualMin?
Я действительно не хочу, чтобы мои настройки и конфигурации удалялись после обновления VirtualMin или процесса восстановления настроек, что обычно делают эти панели управления.
Пожалуйста, поделитесь со мной своими мыслями по этому поводу. Спасибо
ОС: CentOs 6.5 x64
Взято из Настройка Smart HTTP для Git на Virtualmin.
Из Вот Решением было переключиться с обычного HTTP на Smart HTTP с помощью исполняемого файла git-http-backend, который мог выполнять все перехватчики, и предположительно намного быстрее.
Скопируйте исполняемый файл git-httpd-backend в каталог / home / domain / cgi-bin / и установите разрешения на domain: domain. Это сделано для того, чтобы избежать проблем с suexec.
$ cp /usr/libexec/git-core/git-http-backend /home/domain/cgi-bin
$ chown domain:domain /home/domain/cgi-bin/git-http-backend
На /etc/httpd/conf/httpd.conf
добавьте это в VirtualHost для домена:
[...]
ServerName domain.com
[...]
# Set the root directory where git repositories reside
SetEnv GIT_PROJECT_ROOT /home/domain/public_html/git
# By default, the git-http-backend allows push for authenticated
# users and this directive tells the backend when a user is authenticated.
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
# Export all repositories
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /dev/ /home/domain/cgi-bin/git-http-backend/
[...]
# Add this if it’s not already there
DAV on
AuthType Basic
AuthName domain.com
AuthUserFile /home/domain/etc/git.basic.passwd
Require valid-user
Satisfy All
RedirectMatch ^/git(/+)$ /git/gitweb.cgi
RewriteEngine off
AddHandler cgi-script .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
.
Создайте это как /home/domain/public_html/git/reponame.git/hooks/post-receive
и сделать его исполняемым для всех и принадлежать apache: domain:
#!/bin/sh
#
# An example hook script for the "post-receive" event.
#
# The "post-receive" script is run after receive-pack has accepted a pack
# and the repository has been updated. It is passed arguments in through
# stdin in the form
#
# For example:
# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
#
# see contrib/hooks/ for a sample, or uncomment the next line and
# rename the file to "post-receive".
# Echo to the client that you’re sending the mail now
echo "Sending notification email..."
. /usr/share/git-core/contrib/hooks/post-receive-email
# Make sure to update the git repo info on the server for pulls by other clients
git update-server-info
echo "Updated server info."
Согласно эта ссылкаустановите разрешения для каталога git следующим образом, чтобы избежать проблем с правами на запись при отправке новых файлов в коммитах (при этом убедитесь, что сценарий gitweb.cgi доступен для записи только владельцу, чтобы избежать ошибок suexec, которые могут появиться в / etc /httpd/logs/suexec.log):
$ cd /home/domain/public_html/git/
$ chmod -R g+ws *
$ chgrp -R domain *
$ chmod -R g-w gitweb.cgi
$ chmod -R g-s gitweb.cgi
Обновить /home/domain/public_html/git/reponame.git/config
чтобы соответствовать следующему:
[core]
repositoryformatversion = 0
filemode = true
bare = true
[hooks]
mailinglist = email1@domain.com, email2@domain.com
envelopesender = git-commits@domain.com
emailprefix = "[REPONAME] "