українська мова ▾ Topics ▾ Latest version ▾ git-daemon last updated in 2.50.0

НАЗВА

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>…​]

ОПИС

Дійсно простий 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") та не використовуйте шляхи, відносні до користувача. git daemon відмовиться запускатися, якщо ця опція ввімкнена, і не надано аргументи каталогу.

--base-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=<шаблон шляху>

Для підтримки віртуального хостингу можна використовувати інтерпольований шаблон шляху для динамічної побудови альтернативних шляхів. Шаблон підтримує %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=<ім'я хоста> також не підтримується, і --listen має бути вказано IPv4-адресу. Можна вказати більше одного разу. Несумісно з опцією --inetd.

--port=<n>

Прослуховувати на альтернативному порту. Несумісно з опцією --inetd.

--init-timeout=<n>

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

--timeout=<n>

Тайм-аут (у секундах) для певних підзапитів клієнта. Це включає час, необхідний серверу для обробки підзапиту, та час, витрачений на очікування наступного запиту клієнта.

--max-connections=<n>

Максимальна кількість одночасних клієнтів, за замовчуванням 32. Встановіть значення нуль для відсутності обмежень.

--syslog

Скорочення від --log-destination=syslog.

--log-destination=<destination>

Надсилати повідомлення журналу за вказаним призначенням. Зверніть увагу, що цей параметр не передбачає використання опції --verbose, тому за замовчуванням реєструватимуться лише помилки. <призначення> має бути одним із таких пунктів:

stderr

Запис у стандартну помилку. Зверніть увагу, що якщо вказано --detach, процес відключається від справжньої стандартної помилки, що робить цей пункт призначення фактично еквівалентним none.

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=<group>

Змініть uid та gid демона перед входом у цикл обслуговування. Якщо вказано лише --user без --group, використовується основний ідентифікатор групи для користувача. Значення опції надаються getpwnam(3) та getgrnam(3), а числові ідентифікатори не підтримуються.

Використання цих опцій з --inetd є помилкою; за потреби скористайтеся можливостями демона inet, щоб досягти того ж результату, перш ніж запускати git daemon.

Як і багато програм, які змінюють ідентифікатор користувача, демон не скидає змінні середовища, такі як HOME, під час запуску програм git, наприклад, upload-pack та receive-pack. Використовуючи цю опцію, ви також можете встановити та експортувати HOME так, щоб він вказував на домашній каталог <користувач> перед запуском демона, та переконатися, що будь-які файли конфігурації Git у цьому каталозі доступні для читання <користувач>.

--enable=<послуга>
--disable=<послуга>

Увімкнути/вимкнути службу для всього сайту за замовчуванням. Зверніть увагу, що службу, вимкнену для всього сайту, все ще можна ввімкнути для кожного репозиторію, якщо її позначено як перевизначену, а репозиторій увімкне службу за допомогою елемента конфігурації.

--allow-override=<послуга>
--forbid-override=<service>

Дозволити/заборонити зміну налаштувань за замовчуванням для всього сайту за допомогою конфігурації для кожного репозиторію. За замовчуванням усі служби можна перевизначити.

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

Коли інформативні помилки ввімкнено, git-daemon повідомлятиме клієнту детальніші помилки, розрізняючи такі стани, як «немає такого репозиторію» та «репозиторій не експортовано». Це зручніше для клієнтів, але може призвести до витоку інформації про існування неекспортованих репозиторіїв. Коли інформативні помилки не ввімкнено, всі помилки повідомлятимуть клієнту про «відмовлено в доступі». Значення за замовчуванням — --no-informative-errors.

--access-hook=<шлях>

Щоразу, коли клієнт підключається, спочатку виконайте зовнішню команду, визначену тегом <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, дозволяючи анонімне надсилання змін. За замовчуванням це вимкнено, оскільки в протоколі немає автентифікації (іншими словами, будь-хто може надсилати будь-що до репозиторію, включаючи видалення посилань). Це призначено виключно для закритої локальної мережі, де всі дружні. Цю службу можна ввімкнути, встановивши для елемента конфігурації daemon.receivepack значення true.

ПРИКЛАДИ

Ми припускаємо наступне у /etc/services
$ grep 9418 /etc/services
git		9418/tcp		# Система контролю версій Git
«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 буде доступний в середовищі хуків, що викликаються під час виконання служб.

GIT

Частина набору git[1]