Git プロトコル v2 の設定
GitLab 12.8で再有効化。
Git protocol v2はv1のワイヤプロトコルをいくつかの点で改善し、GitLabではHTTPリクエストに対してデフォルトで有効になっています。SSHを有効にするには、管理者による追加設定が必要です。
新機能や改良点の詳細については、Google Open Source Blogや プロトコルのドキュメントをご覧ください。
前提条件
クライアント側では、git
v2.18.0
以降がインストールされている必要があります。
サーバー側では、SSHを設定したい場合、sshd
サーバーがGIT_PROTOCOL
環境を受け入れるように設定する必要があります。
GitLab Helm Chartと All-in-one Dockerイメージを使ったインストールでは、SSHサービスはすでにGIT_PROTOCOL
環境を受け入れるように設定されています。ユーザーはこれ以上何もする必要はありません。
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
サーバ側では、SSH を使うように URL を変えてHTTP の例と同じものを使うことができます。
Git プロトコルの接続バージョンを見る
本番環境で Git プロトコルのバージョンを確認する方法については、関連ドキュメントを参照ください。