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"); пути относительно домашнего каталога пользователя не используются.
gitdaemonоткажется запускаться, если этот параметр включён, а аргументы с каталогами не указаны. -
--base-path=<path> -
Сопоставлять все запросы путей относительно указанного пути. Это своего рода «корень Git»: если запустить
gitdaemonс параметром--base-path=/srv/gitдляexample.com, то при последующей попытке извлечь изменения изgit://example.com/hello.gitкомандаgitdaemonбудет интерпретировать путь как/srv/git/hello.git. -
--base-path-relaxed -
Если включён параметр
--base-pathи поиск репозитория завершается неудачей, с этим параметромgitdaemonпопытается выполнить поиск без добавления базового пути. Это полезно при переходе на использование--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, чтобы добиться того же до запускаgitdaemon.Как и многие программы, меняющие идентификатор пользователя, демон не сбрасывает переменные окружения, такие как
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
-
Эта служба обслуживает клиентов
gitfetch-packиgitls-remote. По умолчанию она включена, но её можно отключить для репозитория, установив для параметра конфигурацииdaemon.uploadpackзначениеfalse. - upload-archive
-
Эта служба обслуживает
gitarchive--remote. По умолчанию она отключена, но её можно включить для репозитория, установив для параметра конфигурацииdaemon.uploadarchзначениеtrue. - receive-pack
-
Эта служба обслуживает клиентов
gitsend-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 как обычный демон для виртуальных хостов
-
Чтобы настроить
gitdaemonкак обычную службу, не использующую 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-адресов. - выборочное включение и отключение служб для отдельных репозиториев
-
Чтобы включить для репозитория службы
gitarchive--remoteи отключитьgitfetch, добавьте следующие строки в файл конфигурации репозитория (то есть в файл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