Git 프로토콜 v2 구성

Tier: Free, Premium, Ultimate
Offering: Self-Managed

Git 프로토콜 v2는 v1 와이어 프로토콜을 여러 가지 측면에서 개선하며, HTTP 요청에 대해 GitLab에서 기본적으로 활성화되어 있습니다. SSH를 활성화하려면 관리자가 추가 구성을 해주어야 합니다.

새로운 기능과 개선 사항에 대한 자세한 내용은 Google 오픈 소스 블로그프로토콜 문서에서 확인할 수 있습니다.

요구 사항

클라이언트 측에서는 git v2.18.0 이상이 설치되어 있어야 합니다.

서버 측에서 SSH를 구성하려면 sshd 서버가 GIT_PROTOCOL 환경을 받아들일 수 있도록 추가 구성해야 합니다.

GitLab Helm 차트올인원 Docker 이미지를 사용하는 설치의 경우, SSH 서비스는 이미 GIT_PROTOCOL 환경을 받아들일 수 있도록 구성되어 있습니다. 사용자가 더 이상 필요하지 않습니다.

Linux 패키지 또는 자체 컴파일한 설치의 경우, 서버의 SSH 구성을 다음 내용을 /etc/ssh/sshd_config 파일에 추가하여 매뉴얼으로 업데이트해야 합니다:

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 2

HTTP 연결

클라이언트가 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.1

SSH 연결

클라이언트가 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

서버 측에서는 HTTPS와 동일한 예시를 사용하여 Git 프로토콜 버전이 사용되는지 확인할 수 있습니다(HTTP 연결에서 똑같은 예시를 사용하되 URL을 SSH로 변경). ### Git 프로토콜 버전의 연결 확인

운영환경에서 사용 중인 Git 프로토콜 버전을 확인하려면 해당 문서를 참조하세요.