Подтвердить что ты не робот

Как настроить git через http?

Мне нужно настроить сервер git с git -over-http (smart http), но доступные в Интернете ресурсы - беспорядок, смешивание в другой конфигурации Apache, отсутствие данных или недостаточно явное.

Я сам отвечаю на этот вопрос, основываясь на том, чего не нашел в доступных ресурсах.

4b9b3361

Ответ 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
  1. Скопируйте следующее в /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>
  1. Теперь замените 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 и выше.

  1. Перезапустите сервер apache: $ apache2ctl -k graceful

Теперь настроен сервер apache, но мы еще не закончили, есть некоторые важные части настройки репозиториев, которые повлияют на работу этой установки или нет.

  1. Настройте репо:
$ 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. Замените соответственно.

  1. Использовать репо

Чтобы использовать репо, вам нужно знать URL. Для этой настройки URL-адрес http://server.domain/myrepo.git

Примечание: http s не будет работать.

При обращении к репо от клиента вы просто добавляете его как удаленный:

$ git remote add origin http://server.domain/myrepo.git

Затем вы можете взаимодействовать с ним, как и с любым другим репо git.