Git 프로토콜 v2 구성
GitLab v19.5Offering: GitLab Self-Managed
요약
Git 프로토콜 v2는 여러 측면에서 v1 와이어 프로토콜을 개선했으며, GitLab에서는 HTTP 요청에 대해 기본으로 활성화되어 있습니다. 새 기능과 개선 사항에 대한 자세한 내용은 Google Open Source Blog에서 확인할 수 있습니다.
Git 프로토콜 v2는 여러 측면에서 v1 와이어 프로토콜을 개선했으며, GitLab에서는 HTTP 요청에 대해 기본으로 활성화되어 있습니다. SSH에서 사용하려면 관리자가 추가로 구성해야 합니다.
새 기능과 개선 사항에 대한 자세한 내용은 Google Open Source Blog에서 확인할 수 있습니다.
사전 요구 사항#
클라이언트 측에는 git v2.18.0 이상이 설치되어 있어야 합니다.
서버 측에서 SSH를 구성하려면 sshd 서버가 GIT_PROTOCOL 환경 변수를
받아들이도록 설정해야 합니다.
GitLab Helm Charts와
All-in-one Docker 이미지를 사용하는 설치에서는 SSH
서비스가 이미 GIT_PROTOCOL 환경 변수를 받아들이도록 구성되어 있습니다.
사용자가 추가로 할 일은 없습니다.
gitlab-sshd가 SSH 트래픽을 처리하는 경우에는 별도의 구성이 필요하지 않습니다.
gitlab-sshd는 GIT_PROTOCOL 환경 변수를 받아들입니다.
gitlab-sshd는 /etc/ssh/sshd_config를 읽지 않으므로 AcceptEnv 설정은 적용되지 않습니다.
OpenSSH를 사용하는 Linux 패키지 설치나 직접 컴파일한 설치에서는 /etc/ssh/sshd_config 파일에
다음 줄을 추가해 서버의 SSH 구성을 직접 갱신합니다.
AcceptEnv GIT_PROTOCOL
SSH 데몬을 구성한 뒤에는 변경 사항을 적용하기 위해 데몬을 재시작합니다.
# CentOS 6 / RHEL 6
sudo service sshd restart
# All other supported distributions
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
서버 측은 HTTP와 동일한 예시를 사용하되 URL만 SSH를 사용하도록 바꾸면 됩니다.
연결의 Git 프로토콜 버전 관찰#
운영 환경에서 사용 중인 Git 프로토콜 버전을 관찰하는 방법은 관련 문서를 참고합니다.