正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Gitプロトコルv2の構成

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

Gitプロトコルv2は、v1ワイヤプロトコルをいくつかの点で改善し、HTTPリクエストに対してGitLabでデフォルトで有効になっています。SSHを有効にするには、管理者による追加の設定が必要です。

新機能と改善点の詳細については、GoogleオープンソースBlogをご覧ください。

前提要件

クライアント側からは、git v2.18.0以降がインストールされている必要があります。

サーバー側からは、SSHを設定するには、sshdサーバーがGIT_PROTOCOL環境変数を受け入れるように設定する必要があります。

GitLab Helm Chartsおよび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

手順

新しいプロトコルを使用するには、クライアントは-c protocol.version=2設定をGitコマンドに渡すか、グローバルに設定する必要があります:

git config --global protocol.version 2

HTTP connections

クライアントが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 Connections

クライアントが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プロトコルv2バージョンを監視します

本番環境で使用されているGitプロトコルバージョンを監視する方法については、関連ドキュメントを参照してください。