InfoGrab DocsInfoGrab Docs

Git 프로토콜 v2 구성

요약

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 프로토콜 버전을 관찰하는 방법은 관련 문서를 참고합니다.

Git 프로토콜 v2 구성

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: 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 프로토콜 버전을 관찰하는 방법은 관련 문서를 참고합니다.