Ответ 1
Сначала нужно понять, что есть два компонента для git -over-http: git и apache. Эти два подключаются через script с именем git -http-backend. Задача состоит в том, чтобы настроить интерфейс между этими двумя компонентами, чтобы HTTP-запросы к git были перенаправлены apache.
Примечание. Безопасность выходит за рамки данного руководства.
-
Начните с установки git и apache2 с помощью диспетчера пакетов вашего дистрибутива.
-
Добавьте модули, необходимые для apache, чтобы включить git -over-http. Это cgi, alias и env
$ a2enmod cgi alias env
- Скопируйте следующее в
/etc/apache2/httpd.conf
(не удаляя все, что он содержит)
<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT /data/git
SetEnv GIT_HTTP_EXPORT_ALL
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/git-http-backend/$1"
Alias /git /data/git
<Directory /usr/lib/git>
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
- Теперь замените 2 вхождения
/data/git
на родительский каталог ваших репозиториев git на сервере (не беспокойтесь, если у вас еще нет репозиториев, просто используйте каталог, в котором вы собираетесь его разместить/их)
Также замените /usr/lib/git/git-http-backend
на местоположение git -http-backend в вашей системе, которое можно найти с помощью $ find / -name git-http-backend
Возможно, что в вашей системе REDIRECT_REMOTE_USER
действительно перезаписывается действительный REMOTE_USER
. Если эта настройка не завершилась, попробуйте удалить эту строку.
В соответствии с этим источником может потребоваться заменить две последние строки в теге Directory тегом Require all granted
для apache 2.4 и выше.
- Перезапустите сервер apache:
$ apache2ctl -k graceful
Теперь настроен сервер apache, но мы еще не закончили, есть некоторые важные части настройки репозиториев, которые повлияют на работу этой установки или нет.
- Настройте репо:
$ mkdir myrepo.git
$ cd myrepo.git
$ git init --bare --shared
$ cp hooks/post-update.sample hooks/post-update
$ git update-server-info
$ chown -R wwwrun:www
Здесь важно понять, что последняя строка изменяет владельца репо на пользователя apache2. Этот пользователь может быть другим в вашей системе. Чтобы найти пользователя apache, выполните $ ps aux | egrep '(apache|httpd)'
. Затем, чтобы найти имя группы пользователя, выполните $ id user-name
. В моей системе пользователь wwwrun и группа www. Замените соответственно.
- Использовать репо
Чтобы использовать репо, вам нужно знать URL. Для этой настройки URL-адрес http://server.domain/myrepo.git
Примечание: http s не будет работать.
При обращении к репо от клиента вы просто добавляете его как удаленный:
$ git remote add origin http://server.domain/myrepo.git
Затем вы можете взаимодействовать с ним, как и с любым другим репо git.