debian-mirror-gitlab/doc/administration/git_protocol.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

115 lines
4 KiB
Markdown
Raw Normal View History

2018-12-05 23:21:45 +05:30
---
2020-10-24 23:57:45 +05:30
stage: Create
group: Source Code
2022-03-02 08:16:31 +05:30
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
2018-12-05 23:21:45 +05:30
description: "Set and configure Git protocol v2"
---
2021-03-11 19:13:27 +05:30
# Configuring Git Protocol v2 **(FREE)**
2018-12-05 23:21:45 +05:30
2022-03-02 08:16:31 +05:30
> [Re-enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/27828) in GitLab 12.8.
2019-01-03 12:48:30 +05:30
2018-12-05 23:21:45 +05:30
Git protocol v2 improves the v1 wire protocol in several ways and is
2022-03-02 08:16:31 +05:30
enabled by default in GitLab for HTTP requests. To enable SSH, additional
configuration is required by an administrator.
2018-12-05 23:21:45 +05:30
More details about the new features and improvements are available in
the [Google Open Source Blog](https://opensource.googleblog.com/2018/05/introducing-git-protocol-version-2.html)
and the [protocol documentation](https://github.com/git/git/blob/master/Documentation/technical/protocol-v2.txt).
## Requirements
From the client side, `git` `v2.18.0` or newer must be installed.
From the server side, if we want to configure SSH we need to set the `sshd`
2019-02-15 15:39:39 +05:30
server to accept the `GIT_PROTOCOL` environment.
2019-07-07 11:18:12 +05:30
In installations using [GitLab Helm Charts](https://docs.gitlab.com/charts/)
2020-06-23 00:09:42 +05:30
and [All-in-one Docker image](https://docs.gitlab.com/omnibus/docker/), the SSH
2021-03-11 19:13:27 +05:30
service is already configured to accept the `GIT_PROTOCOL` environment. Users
2019-02-15 15:39:39 +05:30
need not do anything more.
2021-03-11 19:13:27 +05:30
For Omnibus GitLab and installations from source, update
the SSH configuration of your server manually by adding this line to the `/etc/ssh/sshd_config` file:
2018-12-05 23:21:45 +05:30
2020-03-13 15:44:24 +05:30
```plaintext
2018-12-05 23:21:45 +05:30
AcceptEnv GIT_PROTOCOL
```
2020-04-08 14:13:33 +05:30
Once configured, restart the SSH daemon for the change to take effect:
2018-12-05 23:21:45 +05:30
2020-03-13 15:44:24 +05:30
```shell
2020-04-08 14:13:33 +05:30
# CentOS 6 / RHEL 6
sudo service sshd restart
# All other supported distributions
sudo systemctl restart ssh
2018-12-05 23:21:45 +05:30
```
## Instructions
2022-03-02 08:16:31 +05:30
To use the new protocol, clients need to either pass the configuration
2019-12-04 20:38:33 +05:30
`-c protocol.version=2` to the Git command, or set it globally:
2018-12-05 23:21:45 +05:30
2020-03-13 15:44:24 +05:30
```shell
2018-12-05 23:21:45 +05:30
git config --global protocol.version 2
```
### HTTP connections
Verify Git v2 is used by the client:
2020-03-13 15:44:24 +05:30
```shell
2018-12-05 23:21:45 +05:30
GIT_TRACE_CURL=1 git -c protocol.version=2 ls-remote https://your-gitlab-instance.com/group/repo.git 2>&1 | grep Git-Protocol
```
You should see that the `Git-Protocol` header is sent:
2020-03-13 15:44:24 +05:30
```plaintext
2018-12-05 23:21:45 +05:30
16:29:44.577888 http.c:657 => Send header: Git-Protocol: version=2
```
Verify Git v2 is used by the server:
2020-03-13 15:44:24 +05:30
```shell
2018-12-05 23:21:45 +05:30
GIT_TRACE_PACKET=1 git -c protocol.version=2 ls-remote https://your-gitlab-instance.com/group/repo.git 2>&1 | head
```
Example response using Git protocol v2:
2020-03-13 15:44:24 +05:30
```shell
2018-12-05 23:21:45 +05:30
$ 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.1
```
### SSH Connections
Verify Git v2 is used by the client:
2020-03-13 15:44:24 +05:30
```shell
2021-11-11 11:23:49 +05:30
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
2018-12-05 23:21:45 +05:30
```
You should see that the `GIT_PROTOCOL` environment variable is sent:
2020-03-13 15:44:24 +05:30
```plaintext
2018-12-05 23:21:45 +05:30
debug1: Sending env GIT_PROTOCOL = version=2
```
For the server side, you can use the [same examples from HTTP](#http-connections), changing the
URL to use SSH.
2020-04-08 14:13:33 +05:30
### Observe Git protocol version of connections
2021-10-27 15:23:28 +05:30
For information on observing the Git protocol versions are being used in a production environment,
2022-07-16 23:28:13 +05:30
see the [relevant documentation](gitaly/monitoring.md#useful-queries).