Help us learn about your current experience with the documentation. Take the survey.
配置 Git 协议 v2
- Tier: Free, Premium, Ultimate
- Offering: GitLab Self-Managed
Git 协议 v2 在多个方面改进了 v1 线路协议,并且在 GitLab 中默认为 HTTP 请求启用。要启用 SSH,则需要由管理员进行额外的配置。
有关新功能和改进的更多详细信息,请参阅 Google 开源博客 和 协议文档。
先决条件
在客户端,必须安装 git v2.18.0 或更高版本。
在服务器端,如果我们想配置 SSH,则需要将 sshd 服务器设置为接受 GIT_PROTOCOL 环境变量。
在使用 GitLab Helm Charts 和 一体化 Docker 镜像 的安装中,SSH 服务已配置为接受 GIT_PROTOCOL 环境变量。用户无需进行任何其他操作。
对于通过 Linux 软件包安装或自行编译安装的实例,请通过在 /etc/ssh/sshd_config 文件中添加以下行来手动更新服务器的 SSH 配置:
AcceptEnv GIT_PROTOCOL配置好 SSH 守护进程后,请重启它以使更改生效:
# CentOS 6 / RHEL 6
sudo service sshd restart
# 所有其他支持的发行版
sudo systemctl restart ssh操作说明
要使用新协议,客户端需要向 Git 命令传递配置 -c protocol.version=2,或者进行全局设置:
git config --global protocol.version 2HTTP 连接
验证客户端是否使用了 Git v2:
GIT_TRACE_CURL=1 git -c protocol.version=2 ls-remote https://your-gitlab-instance.com/group/repo.git 2>&1 | grep Git-Protocol您应该会看到发送了 Git-Protocol 头信息:
16:29:44.577888 http.c:657 => Send header: Git-Protocol: version=2验证服务器是否使用了 Git v2:
GIT_TRACE_PACKET=1 git -c protocol.version=2 ls-remote https://your-gitlab-instance.com/group/repo.git 2>&1 | head使用 Git 协议 v2 的响应示例:
$ GIT_TRACE_PACKET=1 git -c protocol.version=2 ls-remote https://your-gitlab-instance.com/group/repo.git 2>&1 | head
10:42:50.574485 pkt-line.c:80 packet: git< # service=git-upload-pack
10:42:50.574653 pkt-line.c:80 packet: git< 0000
10:42:50.574673 pkt-line.c:80 packet: git< version 2
10:42:50.574679 pkt-line.c:80 packet: git< agent=git/2.18.1
10:42:50.574684 pkt-line.c:80 packet: git< ls-refs
10:42:50.574688 pkt-line.c:80 packet: git< fetch=shallow
10:42:50.574693 pkt-line.c:80 packet: git< server-option
10:42:50.574697 pkt-line.c:80 packet: git< 0000
10:42:50.574817 pkt-line.c:80 packet: git< version 2
10:42:50.575308 pkt-line.c:80 packet: git< agent=git/2.18.1SSH 连接
验证客户端是否使用了 Git v2:
GIT_SSH_COMMAND="ssh -v" git -c protocol.version=2 ls-remote ssh://git@your-gitlab-instance.com/group/repo.git 2>&1 | grep GIT_PROTOCOL您应该会看到发送了 GIT_PROTOCOL 环境变量:
debug1: Sending env GIT_PROTOCOL = version=2对于服务器端,您可以使用 HTTP 部分的相同示例,只需将 URL 更改为使用 SSH 即可。
观察 Git 协议版本
有关如何在生产环境中观察正在使用的 Git 协议版本的信息,请参阅相关文档。