设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.50.1 → 2.55.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”,并且会拒绝导出任何未显式以此方式标记为导出的 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.git” 或 “/foo/repo/.git” 时,不允许使用 “/foo/repo”),并且不使用用户相对路径。当启用此选项且未提供目录参数时,
gitdaemon将拒绝启动。 --base-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但仍允许旧路径非常有用。 --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。将其设置为 0 表示无限制。
--syslog-
--log-destination=syslog的简写。 --log-destination=<目标>-
将日志消息发送到指定的目标。请注意,此选项并不暗示
--verbose,因此默认情况下仅记录错误情况。<目标> 必须是以下之一:如果指定了
--inetd或--detach,则默认目标为syslog,否则为stderr。 --user-path--user-path=<路径>-
允许在请求中使用 ~user 表示法。在不指定参数的情况下,对 git://host/~alice/foo 的请求将被视为访问用户
alice主目录下 foo 仓库的请求。如果指定了--user-path=<路径>,则相同的请求将被视为访问用户alice主目录下 <路径>/foo仓库的请求。 --verbose-
记录有关传入连接和所请求文件的详细信息。
--reuseaddr-
在绑定监听套接字时使用
SO_REUSEADDR。这允许服务器重启,而无需等待旧连接超时。 --detach-
从 shell 分离。暗含
--syslog。 --pid-file=<文件>-
将进程 ID 保存到 <文件> 中。在带有
--inetd运行守护进程时会被忽略。 --user=<用户>--group=<组>-
在进入服务循环之前更改守护进程的 uid 和 gid。当仅给出
--user而不给出--group时,将使用该用户的主组 ID。该选项的值将提供给getpwnam(3) 和getgrnam(3),且不支持数字 ID。与
--inetd一起使用这些选项是错误的;如果需要,请在生成gitdaemon之前,利用 inet 守护进程的功能来实现相同的效果。与许多切换用户 ID 的程序一样,守护进程在运行 git程序(例如
upload-pack和receive-pack)时不会重置环境变量,例如HOME。使用此选项时,您可能还希望在启动守护进程之前,设置并导出HOME指向 <用户> 的主目录,并确保该目录中的所有 Git 配置文件对于 <用户> 都是可读的。 --enable=<服务>--disable=<服务>-
默认在全局范围内启用/禁用服务。请注意,如果在全局范围内禁用了某个服务,但该服务被标记为可覆盖,且仓库通过配置项启用了该服务,则仍可以在每个仓库的基础上启用该服务。
--allow-override=<服务>--forbid-override=<服务>-
允许/禁止使用每个仓库的配置来覆盖全局默认值。默认情况下,所有服务均可被覆盖。
--informative-errors--no-informative-errors-
当开启通知性错误(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 设置为处理
/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 设置为处理不同虚拟主机(
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 作为虚拟主机的常规守护进程
-
要将
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