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
НАЗВА
git-daemon —Доволі простий сервер для репозиторіїв Git
СИНОПСИС
gitdaemon[--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»), а також не використовуються шляхи, повʼязані з користувачем.
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=<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 -
Записувати в syslog, використовуючи ідентифікатор
git-daemon. -
none -
Вимкнути ведення журналу.
Стандартно —
syslog, якщо вказано--inetdабо--detach, інакше —stderr. -
-
--user-path -
--user-path=<шлях> -
Дозволити використання нотації ~user у запитах. Якщо параметр не вказано, запит 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
- 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]