Spec-Zone.ru › Git

git-daemon

Название

git-daemon — очень простой сервер для репозиториев Git

Краткое описание

git daemon [--verbose] [--syslog] [--export-all]
           [--timeout=<n>] [--init-timeout=<n>] [--max-connections=<n>]
           [--strict-paths] [--base-path=<path>] [--base-path-relaxed]
           [--user-path | --user-path=<path>]
           [--interpolated-path=<pathtemplate>]
           [--reuseaddr] [--detach] [--pid-file=<file>]
           [--enable=<service>] [--disable=<service>]
           [--allow-override=<service>] [--forbid-override=<service>]
           [--access-hook=<path>] [--[no-]informative-errors]
           [--inetd |
             [--listen=<host-or-ipaddr>] [--port=<n>]
             [--user=<user> [--group=<group>]]]
           [--log-destination=(stderr|syslog|none)]
           [<directory>…​]

Описание

Очень простой демон Git на основе TCP, который обычно прослушивает порт "DEFAULT_GIT_PORT", также известный как 9418. Он ожидает подключения с запросом службы и предоставляет эту службу, если она включена.

Он проверяет, что в каталоге есть специальный файл "git-daemon-export-ok", и отказывается экспортировать любой каталог Git, который явно не был помечен для экспорта таким образом (если не указан параметр --export-all). Если в качестве аргументов git daemon передать пути к каталогам, список доступных репозиториев будет ограничен репозиториями в этих каталогах.

По умолчанию включена только служба upload-pack, которая обслуживает клиенты git fetch-pack и git ls-remote, запускаемые из git fetch, git pull и git clone.

Этот сервер идеально подходит для обновлений только для чтения, то есть для извлечения изменений из репозиториев Git.

Также существует upload-archive для обслуживания git archive.

Параметры

--strict-paths

Точное сопоставление путей (то есть путь "/foo/repo" не будет принят, если реальный путь — "/foo/repo.git" или "/foo/repo/.git"); пути относительно домашнего каталога пользователя не используются. git daemon откажется запускаться, если этот параметр включён, а аргументы с каталогами не указаны.

--base-path=<path>

Сопоставлять все запросы путей относительно указанного пути. Это своего рода «корень Git»: если запустить git daemon с параметром --base-path=/srv/git для example.com, то при последующей попытке извлечь изменения из git://example.com/hello.git команда git daemon будет интерпретировать путь как /srv/git/hello.git.

--base-path-relaxed

Если включён параметр --base-path и поиск репозитория завершается неудачей, с этим параметром git daemon попытается выполнить поиск без добавления базового пути. Это полезно при переходе на использование --base-path, сохраняя поддержку старых путей.

--interpolated-path=<pathtemplate>

Для поддержки виртуального хостинга можно использовать шаблон пути с подстановками, чтобы динамически формировать альтернативные пути. Шаблон поддерживает %H для имени целевого узла, переданного клиентом и преобразованного в нижний регистр, %CH для канонического имени узла, %IP для IP-адреса сервера, %P для номера порта и %D для абсолютного пути к указанному репозиторию. После подстановки путь проверяется на соответствие списку каталогов.

--export-all

Разрешить извлечение изменений из всех каталогов, похожих на репозитории Git (с подкаталогами objects и refs), даже если в них нет файла git-daemon-export-ok.

--inetd

Запустить сервер как службу inetd. Подразумевает --syslog (можно переопределить с помощью --log-destination=). Несовместим с параметрами --detach, --port, --listen, --user и --group.

--listen=<host-or-ipaddr>

Прослушивать указанный IP-адрес или имя узла. IP-адрес может быть адресом IPv4 или, если поддерживается, IPv6. Если IPv6 не поддерживается, параметр --listen=<hostname> также не поддерживается, а в --listen необходимо указать адрес IPv4. Параметр можно указывать несколько раз. Несовместим с параметром --inetd.

--port=<n>

Прослушивать альтернативный порт. Несовместим с параметром --inetd.

--init-timeout=<n>

Тайм-аут (в секундах) между установлением соединения и получением запроса клиента (обычно довольно короткий, поскольку запрос должен поступать практически сразу).

--timeout=<n>

Тайм-аут (в секундах) для отдельных подзапросов клиента. Он включает время обработки подзапроса сервером и время ожидания следующего запроса клиента.

--max-connections=<n>

Максимальное число одновременных клиентов; по умолчанию — 32. Установите значение 0, чтобы снять ограничение.

--syslog

Сокращение для --log-destination=syslog.

--log-destination=<destination>

Отправлять сообщения журнала в указанное место назначения. Обратите внимание, что этот параметр не подразумевает --verbose, поэтому по умолчанию регистрируются только ошибки. Значением <destination> должно быть одно из следующих:

stderr

Записывать в стандартный поток ошибок. Обратите внимание: если указан параметр --detach, процесс отключается от настоящего стандартного потока ошибок, поэтому это место назначения фактически эквивалентно none.

syslog

Записывать в syslog, используя идентификатор git-daemon.

none

Отключить ведение журнала.

По умолчанию местом назначения является syslog, если указан параметр --inetd или --detach; в противном случае используется stderr.

--user-path
--user-path=<path>

Разрешить использование обозначения ~user в запросах. Если параметр указан без значения, запрос git://host/~alice/foo рассматривается как запрос доступа к репозиторию foo в домашнем каталоге пользователя alice. Если указан параметр --user-path=<path>, тот же запрос рассматривается как запрос доступа к репозиторию <path>/foo в домашнем каталоге пользователя alice.

--verbose

Записывать подробные сведения о входящих соединениях и запрашиваемых файлах.

--reuseaddr

Использовать SO_REUSEADDR при привязке прослушивающего сокета. Это позволяет перезапустить сервер, не дожидаясь истечения времени ожидания старых соединений.

--detach

Отсоединиться от оболочки. Подразумевает --syslog.

--pid-file=<file>

Сохранить идентификатор процесса в <file>. Игнорируется, если демон запущен под управлением --inetd.

--user=<user>
--group=<group>

Изменить uid и gid демона перед переходом к циклу обслуживания. Если указан только --user, но не --group, используется идентификатор основной группы пользователя. Значения параметров передаются в getpwnam(3) и getgrnam(3); числовые идентификаторы не поддерживаются.

Использование этих параметров вместе с --inetd приводит к ошибке; при необходимости используйте средства демона inet, чтобы добиться того же до запуска git daemon.

Как и многие программы, меняющие идентификатор пользователя, демон не сбрасывает переменные окружения, такие как HOME, при запуске программ Git, например upload-pack и receive-pack. При использовании этого параметра также может потребоваться задать и экспортировать HOME, указав домашний каталог пользователя <user>, до запуска демона, а также убедиться, что любые файлы конфигурации Git в этом каталоге доступны для чтения пользователю <user>.

--enable=<service>
--disable=<service>

Включить или отключить службу по умолчанию для всего сайта. Обратите внимание: службу, отключённую на уровне сайта, всё ещё можно включить для отдельного репозитория, если разрешено переопределение и служба включена в конфигурации репозитория.

--allow-override=<service>
--forbid-override=<service>

Разрешить или запретить переопределение значения по умолчанию для всего сайта с помощью конфигурации отдельного репозитория. По умолчанию можно переопределить все службы.

--informative-errors
--no-informative-errors

Если включены информативные сообщения об ошибках, git-daemon отправляет клиенту более подробные сведения, различая, например, ситуации «репозиторий не существует» и «репозиторий не экспортируется». Это удобнее для клиентов, но может раскрыть сведения о существовании неэкспортируемых репозиториев. Если информативные сообщения об ошибках не включены, во всех случаях клиенту сообщается «доступ запрещён». По умолчанию используется --no-informative-errors.

--access-hook=<path>

При каждом подключении клиента сначала запускать внешнюю команду, указанную в <path>. В качестве аргументов командной строки ей передаются имя службы (например, "upload-pack"), путь к репозиторию, имя узла (%H), каноническое имя узла (%CH), IP-адрес (%IP) и порт TCP (%P). Внешняя команда может отклонить запрос на службу, завершившись с ненулевым кодом (или разрешить его, завершившись с нулевым кодом). При принятии решения она также может использовать переменные окружения $REMOTE_ADDR и $REMOTE_PORT, чтобы получить сведения о запрашивающей стороне.

При отклонении запроса внешняя команда может записать одну строку в стандартный поток вывода; она будет отправлена запрашивающей стороне в качестве сообщения об ошибке.

<каталог>

Оставшиеся аргументы задают список каталогов. Если каталоги указаны, процесс git-daemon будет обслуживать запрошенный каталог, только если тот находится в одном из этих каталогов. Если указан параметр --strict-paths, запрошенный каталог должен точно совпадать с одним из этих каталогов.

Службы

Эти службы можно включать и отключать глобально с помощью параметров командной строки этой команды. Если требуется более точное управление (например, чтобы разрешить выполнение git archive только для нескольких выбранных репозиториев, обслуживаемых демоном), для их включения или отключения можно использовать файл конфигурации отдельного репозитория.

upload-pack

Эта служба обслуживает клиентов git fetch-pack и git ls-remote. По умолчанию она включена, но её можно отключить для репозитория, установив для параметра конфигурации daemon.uploadpack значение false.

upload-archive

Эта служба обслуживает git archive --remote. По умолчанию она отключена, но её можно включить для репозитория, установив для параметра конфигурации daemon.uploadarch значение true.

receive-pack

Эта служба обслуживает клиентов git send-pack, позволяя выполнять анонимную отправку изменений. По умолчанию она отключена, поскольку в протоколе отсутствует no аутентификация (иными словами, любой может отправить в репозиторий любые данные, в том числе удалить ссылки). Эта служба предназначена исключительно для закрытых локальных сетей, где все участники заслуживают доверия. Её можно включить, установив для параметра конфигурации daemon.receivepack значение true.

Примеры

Предположим, что в /etc/services указано следующее
$ grep 9418 /etc/services
git                9418/tcp                # Git Version Control System
git daemon как сервер inetd

Чтобы настроить git daemon как службу inetd, обслуживающую любые репозитории в /pub/foo или /pub/bar, добавьте в /etc/inetd следующую запись, расположив её целиком в одной строке:

        git stream tcp nowait nobody  /usr/bin/git
                git daemon --inetd --verbose --export-all
                /pub/foo /pub/bar
git daemon как сервер inetd для виртуальных хостов

Чтобы настроить git daemon как службу inetd, обслуживающую репозитории для разных виртуальных хостов — www.example.com и www.example.org, — добавьте в /etc/inetd следующую запись, расположив её целиком в одной строке:

        git stream tcp nowait nobody /usr/bin/git
                git daemon --inetd --verbose --export-all
                --interpolated-path=/pub/%H%D
                /pub/www.example.org/software
                /pub/www.example.com/software
                /software

В этом примере каталог верхнего уровня /pub содержит подкаталог для каждого поддерживаемого имени виртуального хоста. Кроме того, оба хоста объявляют репозитории просто как git://www.example.com/software/repo.git. Для клиентов до версии 1.4.0 можно также создать символическую ссылку из /software на соответствующий репозиторий по умолчанию.

git daemon как обычный демон для виртуальных хостов

Чтобы настроить git daemon как обычную службу, не использующую inetd и обслуживающую репозитории нескольких виртуальных хостов на основе их IP-адресов, запустите демон следующим образом:

        git daemon --verbose --export-all
                --interpolated-path=/pub/%IP/%D
                /pub/192.168.1.200/software
                /pub/10.10.220.23/software

В этом примере каталог верхнего уровня /pub содержит подкаталог для каждого поддерживаемого IP-адреса виртуального хоста. Репозитории по-прежнему можно открывать по имени узла, если оно соответствует одному из этих IP-адресов.

выборочное включение и отключение служб для отдельных репозиториев

Чтобы включить для репозитория службы git archive --remote и отключить git fetch, добавьте следующие строки в файл конфигурации репозитория (то есть в файл config рядом с HEAD, refs и objects).

        [daemon]
                uploadpack = false
                uploadarch = true

Окружение

git daemon присвоит REMOTE_ADDR IP-адрес клиента, подключившегося к нему, если этот IP-адрес доступен. Переменная REMOTE_ADDR будет доступна в окружении хуков, вызываемых при выполнении служб.

daemon

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-daemon

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API