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守护程序_参数传递,则可以进一步将要约限制为包含这些路径的白名单。
默认情况下,仅启用upload-pack
服务,该服务为 git fetch-pack 和 git ls-remote 客户端提供服务,这些客户端是从 git fetch 调用的, git pull 和 git clone 。
这非常适合只读更新,即从Git存储库中提取。
还存在upload-archive
以服务 git存档。
--strict-paths
完全匹配路径(即当真实路径是“/foo/repo.git”或“/foo/repo/.git”时不允许“/ foo / repo”)并且不做用户相对路径。启用此选项且未指定白名单时, _git守护程序_将拒绝启动。
--base-path=<path>
将所有路径请求重新映射为相对于给定路径。这有点像“Git root” - 如果你在example.com上用 --base-path = / srv / git 运行 git守护进程,那么如果你以后尝试拉 git://example.com/hello.git , _git守护程序_会将路径解释为 /srv/git/hello.git 。
--base-path-relaxed
如果启用了--base-path并且repo lookup失败,则使用此选项 _git守护程序_将尝试在不添加基本路径前缀的情况下进行查找。这对于切换到--base-path用法很有用,同时仍允许旧路径。
--interpolated-path=<pathtemplate>
为了支持虚拟主机,可以使用内插路径模板来动态构建备用路径。模板支持客户端提供的目标主机名%H,但转换为全部小写,%CH为规范主机名,%IP为服务器IP地址,%P为端口号,%D为绝对路径命名的存储库。插值后,路径将根据目录白名单进行验证。
--export-all
允许从所有看起来像Git存储库的目录(具有_对象_和 refs 子目录)中拉出,即使它们没有 git-daemon-export-ok ]文件。
--inetd
让服务器作为inetd服务运行。意味着--sloglog(可以用--log-destination=
覆盖)。与--detach, - port, - liste, - 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.将其设置为零,无限制。
--syslog
--log-destination=syslog
的缩写。
--log-destination=<destination>
将日志消息发送到指定目标。请注意,此选项并不意味着--verbose,因此默认情况下仅记录错误条件。 < destination>必须是以下之一:
stderr
写入标准错误。请注意,如果指定了--detach
,则进程将脱离实际标准错误,使此目标有效地等效于none
。
syslog
使用git-daemon
标识符写入syslog。
none
禁用所有日志记录
如果指定了--inetd
或--detach
,则默认目标为syslog
,否则为stderr
。
--user-path
--user-path=<path>
允许〜用户表示法用于请求。当没有参数指定时,对git:// host / ~alice / foo的请求被视为访问用户alice
主目录中的 foo 存储库的请求。如果指定了--user-path=path
,则将相同的请求作为访问用户alice
的主目录中的path/foo
存储库的请求。
--verbose
记录有关传入连接和请求文件的详细信息。
--reuseaddr
绑定侦听套接字时使用SO_REUSEADDR。这允许服务器重新启动而无需等待旧连接超时。
--detach
脱离外壳。意味着--sloglog。
--pid-file=<file>
将进程ID保存在_文件_中。守护程序在--inetd
下运行时忽略。
--user=<user>
--group=<group>
在进入服务循环之前更改守护进程的uid和gid。如果仅在没有--group
的情况下给出--user
,则使用用户的主要组ID。选项的值赋予getpwnam(3)
和getgrnam(3)
,不支持数字ID。
与--inetd
一起使用时,给出这些选项是错误的;如果需要,在产生 _git守护程序_之前使用inet守护程序的功能来实现相同的功能。
与许多切换用户ID的程序一样,守护程序在运行git程序时不会重置诸如$HOME
之类的环境变量,例如upload-pack
和receive-pack
。使用此选项时,您可能还需要在启动守护程序之前将HOME
设置并导出到<user>
的主目录,并确保<user>
可读取该目录中的任何Git配置文件。
--enable=<service>
--disable=<service>
默认情况下在站点范围内启用/禁用服务。请注意,如果某个服务器标记为可覆盖,并且存储库通过配置项启用该服务,则仍可以为每个存储库启用站点范围内禁用的服务。
--allow-override=<service>
--forbid-override=<service>
允许/禁止使用每个存储库配置覆盖站点范围的默认值。默认情况下,可以覆盖所有服务。
--[no-]informative-errors
当打开信息性错误时,git-daemon将向客户端报告更详细的错误,将“no such repository”等条件与“未导出的存储库”区分开来。这对客户来说更方便,但可能会泄漏有关未导出存储库存在的信息。如果未启用信息性错误,则所有错误都会向客户端报告“拒绝访问”。默认值为--no-informative-errors。
--access-hook=<path>
每次客户端连接时,首先运行由< path>指定的外部命令。具有服务名称(例如“upload-pack”),存储库的路径,主机名(%H),规范主机名(%CH),IP地址(%IP)和TCP端口(%P)作为其命令行参数。外部命令可以通过退出非零状态(或通过以零状态退出来允许它)来决定拒绝服务。在做出此决定时,它还可以查看$ REMOTE_ADDR和$REMOTE_PORT
环境变量以了解请求者。
外部命令可以选择将单行写入其标准输出,以便在拒绝服务时将其作为错误消息发送给请求者。
<directory>
要添加到允许目录的白名单的目录。除非指定了--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 客户端提供服务,允许匿名推送。它默认是禁用的,因为协议中有_没有_身份验证(换句话说,任何人都可以将任何内容推送到存储库中,包括删除引用)。这仅适用于每个人都很友好的封闭式LAN环境。可以通过将daemon.receivepack
配置项设置为true
来启用此服务。
We assume the following in /etc/services
$ grep 9418 /etc/services
git 9418/tcp # Git Version Control System
git daemon as inetd server
要将 _git守护程序_设置为处理列入白名单的目录集/ pub / foo和/ pub / bar下的任何存储库的inetd服务,请将以下条目放入/ etc / inetd all in one线:
git stream tcp nowait nobody /usr/bin/git
git daemon --inetd --verbose --export-all
/pub/foo /pub/bar
git daemon as inetd server for virtual hosts
要将 _git守护程序_设置为处理不同虚拟主机www.example.com
和www.example.org
的存储库的inetd服务,请在/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 as regular daemon for virtual hosts
要将 _git守护程序_设置为常规的非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地址。
selectively enable/disable services per repository
要启用 git archive --remote 并禁用存储库中的 git fetch ,请在存储库的配置文件中保存以下内容(即文件 config next到HEAD
, refs 和_对象_)。
[daemon]
uploadpack = false
uploadarch = true
如果IP地址可用, _git守护程序_会将REMOTE_ADDR设置为与其连接的客户端的IP地址。 REMOTE_ADDR将在执行服务时调用的挂钩环境中可用。
部分 git [1] 套件