Git 프로토콜 v2 구성

Tier: Free, Premium, Ultimate
Offering: 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 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              => 헤더 전송: 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           패킷:          git< # service=git-upload-pack
10:42:50.574653 pkt-line.c:80           패킷:          git< 0000
10:42:50.574673 pkt-line.c:80           패킷:          git< version 2
10:42:50.574679 pkt-line.c:80           패킷:          git< agent=git/2.18.1
10:42:50.574684 pkt-line.c:80           패킷:          git< ls-refs
10:42:50.574688 pkt-line.c:80           패킷:          git< fetch=shallow
10:42:50.574693 pkt-line.c:80           패킷:          git< server-option
10:42:50.574697 pkt-line.c:80           패킷:          git< 0000
10:42:50.574817 pkt-line.c:80           패킷:          git< version 2
10:42:50.575308 pkt-line.c:80           패킷:          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

서버 측에서는 HTTP에서 사용할 수 있는 동일한 예제를 사용하되, URL을 SSH를 사용하도록 변경할 수 있습니다.

연결의 Git 프로토콜 버전 관찰

프로덕션 환경에서 사용되고 있는 Git 프로토콜 버전을 관찰하는 방법에 대한 정보는 관련 문서를 참조하세요.