设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.50.1 → 2.52.0 无更改
-
2.50.0
2025-06-16
- 2.44.1 → 2.49.1 无更改
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 无更改
-
2.43.0
2023-11-20
- 2.37.3 → 2.42.4 无更改
-
2.37.2
2022-08-11
- 2.22.1 → 2.37.1 无更改
-
2.22.0
2019-06-07
- 2.17.1 → 2.21.4 无变更
-
2.17.0
2018-04-02
- 2.10.5 → 2.16.6 无更改
-
2.9.5
2017-07-30
- 2.2.3 → 2.8.6 无变更
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
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" 的魔术文件,并且除非指定了 --export-all 参数,否则将拒绝导出任何未以这种方式明确标记为导出的 Git 目录。如果您将一些目录路径作为 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.git" 或 "/foo/repo/.git" 时,不允许 "/foo/repo"),并且不使用用户相对路径。如果启用了此选项且未提供任何目录参数,
gitdaemon将拒绝启动。 --base-path=<path>-
将所有路径请求重映射为相对于给定路径。这类似于 "Git 根目录" - 如果您在
example.com上使用--base-path=/srv/git运行gitdaemon,然后您以后尝试从git://example.com/hello.git拉取,gitdaemon将把该路径解释为/srv/git/hello.git。 --base-path-relaxed-
如果启用了
--base-path且仓库查找失败,则使用此选项时,gitdaemon将尝试在不添加 base path 前缀的情况下进行查找。这对于切换到--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。设置为零表示无限制。
--syslog-
是
--log-destination=syslog的简写。 --log-destination=<destination>-
将日志消息发送到指定的目标。请注意,此选项不意味着
--verbose,因此默认情况下只记录错误条件。<destination> 必须是以下之一:如果指定了
--inetd或--detach,则默认目标为syslog,否则为stderr。 --user-path--user-path=<path>-
允许在请求中使用 ~user 符号。当未指定参数时,对 git://host/~alice/foo 的请求被解释为访问用户
alice的主目录中的 _foo_ 仓库。如果指定了--user-path=<path>,则相同的请求被解释为访问用户alice的主目录中的 <path>/foo仓库。 --verbose-
记录有关传入连接和请求文件的详细信息。
--reuseaddr-
在绑定监听套接字时使用
SO_REUSEADDR。这允许服务器在旧连接超时之前重新启动。 --detach-
从 shell 中分离。暗示
--syslog。 --pid-file=<file>-
将进程 ID 保存到 _<file>_ 中。在守护进程以
--inetd模式运行时将被忽略。 --user=<user>--group=<group>-
在进入服务循环之前更改守护进程的 uid 和 gid。仅当提供
--user而没有--group时,将使用用户的首要组 ID。选项的值将传递给getpwnam(3) 和getgrnam(3),并且不支持数值 ID。与
--inetd选项一起使用时,提供这些选项是错误的;如果需要,请使用 inet 守护进程的功能在启动gitdaemon之前实现相同的功能。与许多切换用户 ID 的程序一样,守护进程在运行 git 程序(例如
upload-pack和receive-pack)时不会重置诸如HOME之类的环境变量。当使用此选项时,您可能还想在启动守护进程之前将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环境变量来了解请求者,以便做出决定。外部命令可以选择性地向其标准输出写入一行,当它拒绝服务时,该行将作为错误消息发送给请求者。
- <directory>
-
剩余的参数提供目录列表。如果指定了任何目录,则
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_ 设置为处理
/pub/foo或/pub/bar中任何仓库的 inetd 服务,请将以下条目放在/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 服务,请将以下条目放在
/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设置为处理多个虚拟主机(基于其 IP 地址)的仓库的常规(非 inetd)守护进程,请像这样启动守护进程: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,请在仓库的配置文件中(即 _HEAD_、_refs_ 和 _objects_ 旁边的 _config_ 文件)添加以下内容:[daemon] uploadpack = false uploadarch = true