Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.50.1 → 2.54.0 no changes
-
2.50.0
2025-06-16
- 2.44.1 → 2.49.1 no changes
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 no changes
-
2.43.0
2023-11-20
- 2.37.3 → 2.42.4 no changes
-
2.37.2
2022-08-11
- 2.22.1 → 2.37.1 no changes
-
2.22.0
2019-06-07
- 2.17.1 → 2.21.4 no changes
-
2.17.0
2018-04-02
- 2.10.5 → 2.16.6 no changes
-
2.9.5
2017-07-30
- 2.2.3 → 2.8.6 no changes
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
ОБЗОР
gitdaemon[--verbose] [--syslog] [--export-all] [--timeout=<число>] [--init-timeout=<число>] [--max-connections=<число>] [--strict-paths] [--base-path=<путь>] [--base-path-relaxed] [--user-path|--user-path=<путь>] [--interpolated-path=<шаблон-пути>] [--reuseaddr] [--detach] [--pid-file=<файл>] [--enable=<служба>] [--disable=<служба>] [--allow-override=<служба>] [--forbid-override=<служба>] [--access-hook=<путь>] [--[no-]informative-errors] [--inetd| [--listen=<хост-или-ip-адрес>] [--port=<число>] [--user=<пользователь> [--group=<группа>]]] [--log-destination=(stderr|syslog|none)] [<каталог>…]
ОПИСАНИЕ
Очень простой TCP-демон Git, который обычно прослушивает порт "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=<путь> -
Переопределяет все запросы путей как относительные к указанному пути. Это своего рода "корень 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=<шаблон-пути> -
Для поддержки виртуального хостинга можно использовать шаблон интерполированного пути для динамического создания альтернативных путей. Шаблон поддерживает
%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=<хост-или-ip-адрес> -
Прослушивать определённый IP-адрес или имя хоста. IP-адреса могут быть либо адресом IPv4, либо адресом IPv6, если поддерживается. Если IPv6 не поддерживается, то
--listen=<имя-хоста> также не поддерживается, и--listenдолжен быть задан IPv4-адрес. Может быть указан несколько раз. Несовместимо с параметром--inetd. -
--port=<n> -
Прослушивать альтернативный порт. Несовместимо с параметром
--inetd. -
--init-timeout=<n> -
Тайм-аут (в секундах) между моментом установления соединения и получением запроса клиента (обычно довольно низкое значение, поскольку это должно происходить практически мгновенно).
-
--timeout=<n> -
Тайм-аут (в секундах) для конкретных клиентских подзапросов. Это включает время, необходимое серверу для обработки подзапроса, и время ожидания следующего запроса клиента.
-
--max-connections=<n> -
Максимальное количество одновременных клиентов, по умолчанию 32. Установите ноль для отсутствия ограничения.
-
--syslog -
Краткая форма для
--log-destination=syslog. -
--log-destination=<назначение> -
Отправлять сообщения журнала в указанное место назначения. Обратите внимание, что этот параметр не подразумевает
--verbose, поэтому по умолчанию будут регистрироваться только ошибочные ситуации. <назначение> должно быть одним из:-
stderr -
Записывать в стандартный вывод ошибок. Обратите внимание, что если указан
--detach, процесс отключается от реального стандартного вывода ошибок, делая это место назначения фактически эквивалентнымnone. -
syslog -
Записывать в syslog, используя идентификатор
git-daemon. -
none -
Отключить все журналирование.
Назначение по умолчанию —
syslog, если указан--inetdили--detach, в противном случае —stderr. -
-
--user-path -
--user-path=<путь> -
Разрешить использование обозначения ~пользователь в запросах. Если указано без параметра, запрос к git://host/~alice/foo рассматривается как запрос на доступ к репозиторию foo в домашнем каталоге пользователя
alice. Если указан--user-path=<путь>, тот же запрос рассматривается как запрос на доступ к репозиторию <путь>/fooв домашнем каталоге пользователяalice. -
--verbose -
Регистрировать подробную информацию о входящих соединениях и запрошенных файлах.
-
--reuseaddr -
Использовать
SO_REUSEADDRпри привязке прослушивающего сокета. Это позволяет серверу перезапускаться без ожидания тайм-аута старых соединений. -
--detach -
Отсоединиться от оболочки. Подразумевает
--syslog. -
--pid-file=<файл> -
Сохранить идентификатор процесса в <файле>. Игнорируется, когда демон запущен под
--inetd. -
--user=<пользователь> -
--group=<группа> -
Изменить uid и gid демона перед входом в цикл обслуживания. Если указан только
--userбез--group, используется основной идентификатор группы для пользователя. Значения параметра передаются вgetpwnam(3) иgetgrnam(3), числовые идентификаторы не поддерживаются.Указание этих параметров при использовании с
--inetdявляется ошибкой; при необходимости используйте возможность демона inet для достижения того же результата перед запускомgitdaemon.Как и многие программы, которые переключают идентификатор пользователя, демон не сбрасывает переменные среды, такие как
HOME, когда запускает программы git, напримерupload-packиreceive-pack. При использовании этого параметра вам также может потребоваться установить и экспортироватьHOME, чтобы он указывал на домашний каталог <пользователя> перед запуском демона, и убедиться, что любые файлы конфигурации Git в этом каталоге доступны для чтения <пользователем>. -
--enable=<служба> -
--disable=<служба> -
Включить/отключить службу общесистемно по умолчанию. Обратите внимание, что служба, отключённая общесистемно, всё равно может быть включена для отдельного репозитория, если она помечена как переопределяемая и репозиторий включает службу с помощью элемента конфигурации.
-
--allow-override=<служба> -
--forbid-override=<служба> -
Разрешить/запретить переопределение общесистемного значения по умолчанию конфигурацией отдельного репозитория. По умолчанию все службы могут быть переопределены.
-
--informative-errors -
--no-informative-errors -
Когда включены информативные ошибки, git-daemon будет сообщать клиенту более подробные ошибки, отличая такие ситуации, как "нет такого репозитория" от "репозиторий не экспортирован". Это более удобно для клиентов, но может раскрыть информацию о существовании неэкспортированных репозиториев. Когда информативные ошибки не включены, все ошибки сообщают клиенту "отказано в доступе". По умолчанию используется
--no-informative-errors. -
--access-hook=<путь> -
Каждый раз, когда клиент подключается, сначала выполняется внешняя команда, указанная <путём>, с именем службы (например, "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, разрешая анонимную отправку. Он отключён по умолчанию, поскольку в протоколе нет аутентификации (другими словами, любой может отправить что угодно в репозиторий, включая удаление ссылок). Это предназначено исключительно для закрытой локальной сети, где все дружественны. Эта служба может быть включена путём установки элемента конфигурации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 будет доступен в среде перехватчиков, вызываемых при выполнении служб.
GIT
Является частью пакета git[1]