Git 프로토콜 v2 구성
Git 프로토콜 v2는 여러 가지 방법으로 v1 와이어 프로토콜을 개선하며, HTTP 요청에 대해 GitLab에서 기본으로 활성화되어 있습니다. SSH를 사용하려면 추가 구성이 관리자에 의해 필요합니다.
새로운 기능 및 개선 사항에 대한 자세한 내용은 Google 오픈 소스 블로그 및 프로토콜 문서에서 확인할 수 있습니다.
전제 조건
클라이언트 측에서는 git
v2.18.0
이상이 설치되어 있어야 합니다.
서버 측에서 SSH를 구성하려면 sshd
서버가 GIT_PROTOCOL
환경을 수락하도록 추가 구성이 필요합니다.
GitLab Helm 차트 및 올인원 도커 이미지를 사용하는 설치에서는 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
을 전달하거나 전역적으로 설정해야 합니다.
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 프로토콜 버전을 확인하는 자세한 내용은 관련 문서를 참조하세요.