- 
  1. Введение- 1.1 О системе контроля версий
- 1.2 Краткая история Git
- 1.3 Что такое Git?
- 1.4 Командная строка
- 1.5 Установка Git
- 1.6 Первоначальная настройка Git
- 1.7 Как получить помощь?
- 1.8 Заключение
 
- 
  2. Основы Git
- 
  3. Ветвление в Git- 3.1 О ветвлении в двух словах
- 3.2 Основы ветвления и слияния
- 3.3 Управление ветками
- 3.4 Работа с ветками
- 3.5 Удалённые ветки
- 3.6 Перебазирование
- 3.7 Заключение
 
- 
  4. Git на сервере- 4.1 Протоколы
- 4.2 Установка Git на сервер
- 4.3 Генерация открытого SSH ключа
- 4.4 Настраиваем сервер
- 4.5 Git-демон
- 4.6 Умный HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git-хостинг
- 4.10 Заключение
 
- 
  5. Распределённый Git
- 
  6. GitHub
- 
  7. Инструменты Git- 7.1 Выбор ревизии
- 7.2 Интерактивное индексирование
- 7.3 Припрятывание и очистка
- 7.4 Подпись
- 7.5 Поиск
- 7.6 Перезапись истории
- 7.7 Раскрытие тайн reset
- 7.8 Продвинутое слияние
- 7.9 Rerere
- 7.10 Обнаружение ошибок с помощью Git
- 7.11 Подмодули
- 7.12 Создание пакетов
- 7.13 Замена
- 7.14 Хранилище учётных данных
- 7.15 Заключение
 
- 
  8. Настройка Git- 8.1 Конфигурация Git
- 8.2 Атрибуты Git
- 8.3 Хуки в Git
- 8.4 Пример принудительной политики Git
- 8.5 Заключение
 
- 
  9. Git и другие системы контроля версий- 9.1 Git как клиент
- 9.2 Переход на Git
- 9.3 Заключение
 
- 
  10. Git изнутри- 10.1 Сантехника и Фарфор
- 10.2 Объекты Git
- 10.3 Ссылки в Git
- 10.4 Pack-файлы
- 10.5 Спецификации ссылок
- 10.6 Протоколы передачи данных
- 10.7 Обслуживание репозитория и восстановление данных
- 10.8 Переменные окружения
- 10.9 Заключение
 
- 
  A1. Приложение A: Git в других окружениях- A1.1 Графические интерфейсы
- A1.2 Git в Visual Studio
- A1.3 Git в Visual Studio Code
- A1.4 Git в Eclipse
- A1.5 Git в IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.6 Git в Sublime Text
- A1.7 Git в Bash
- A1.8 Git в Zsh
- A1.9 Git в PowerShell
- A1.10 Заключение
 
- 
  A2. Приложение B: Встраивание Git в ваши приложения- A2.1 Git из командной строки
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
 
- 
  A3. Приложение C: Команды Git- A3.1 Настройка и конфигурация
- A3.2 Клонирование и создание репозиториев
- A3.3 Основные команды
- A3.4 Ветвление и слияния
- A3.5 Совместная работа и обновление проектов
- A3.6 Осмотр и сравнение
- A3.7 Отладка
- A3.8 Внесение исправлений
- A3.9 Работа с помощью электронной почты
- A3.10 Внешние системы
- A3.11 Администрирование
- A3.12 Низкоуровневые команды
 
4.6 Git на сервере - Умный HTTP
Умный HTTP
Теперь у нас есть доступ с аутентификацией через SSH и неаутентифицированный доступ через git://, но есть ещё протокол, который может делать и то и другое.
Настройка умного HTTP — это просто установка на сервер CGI-скрипта git-http-backend, поставляемого вместе с Git.
Этот CGI-скрипт будет читать путь и заголовки, посылаемые git fetch или git push в URL и определять, может ли клиент работать через HTTP (это верно для любого клиента, начиная с версии 1.6.6).
Если CGI-скрипт видит, что клиент умный, то и общаться с ним будет по-умному, иначе откатится на простое поведение (что делает операции чтения обратно совместимыми со старыми клиентами).
Давайте пройдёмся по самой базовой установке. Мы настроим Apache как сервер CGI. Если у вас не установлен Apache, вы можете сделать это на Linux-машине примерно так:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias envЭто также включит необходимые для корректной работы модули mod_cgi, mod_alias и mod_env.
Так же необходимо установить Unix пользователя и группу для каталога /srv/git в значение www-data, чтобы позволить веб-серверу читать из и писать в репозитории, потому что процесс Apache, запускающий CGI скрипт, работает от имени этого пользователя:
$ chgrp -R www-data /srv/gitЗатем добавим некоторые настройки в конфигурационный файл Apache, чтобы запускать git-http-backend как обработчик для всех запросов, содержащих /git.
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/Если пропустить переменную окружения GIT_HTTP_EXPORT_ALL, тогда Git будет отдавать только неаутентифицированным клиентам репозитории с файлом git-daemon-export-ok внутри, также как это делает Git-демон.
Наконец, нужно разрешить Apache обрабатывать запросы к git-http-backend, при этом запросы на запись должны быть авторизованы, для этого можно использовать вот такой блок конфигурации:
<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /srv/git/.htpasswd
    Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
    Require valid-user
</Files>Это потребует создания файла .htpasswd, содержащего пароли всех пользователей.
Например, добавление пользователя «schacon» в этот файл делается так:
$ htpasswd -c /srv/git/.htpasswd schaconСуществует множество способов аутентифицировать пользователей в Apache, вам нужно выбрать и применить хотя бы один из них. Мы привели простейший пример. Скорее всего вы ещё захотите настроить SSL для шифрования трафика.
Мы не хотим погружаться слишком глубоко в бездну настроек Apache, так как у вас может быть другой сервер или другие требования к аутентификации.
Идея в том, что Git идёт с CGI-скриптом git-http-backend, который берёт на себя согласование передачи и приёма данных по HTTP.
Сам по себе, он не реализует аутентификации, но это легко настраивается на уровне веб-сервера, который его запускает.
Вы можете сделать это практически на любом веб-сервере с поддержкой CGI, так что используйте тот, который знаете лучше всего.
| Примечание | За дополнительной информацией по настройке аутентификации в Apache обратитесь к документации: https://httpd.apache.org/docs/current/howto/auth.html | 
