mermaid %%{init: { “fontFamily”: “GitLab Sans” }}%% 시퀀스 다이어그램 참가자 클라이언트의 Git 참가자 GitLab SSHD 참가자 Rails 참가자 Gitaly 참가자 서버의 Git

노트 참가자 클라이언트의 Git: git fetch
클라이언트의 Git->>+GitLab SSHD: ssh git fetch-pack 요청
GitLab SSHD->>+Rails: GET /internal/api/authorized_keys?key=AAAA...
노트 Rails 우측: 키 ID 조회
Rails-->>-GitLab SSHD: 200 OK, command="gitlab-shell upload-pack key_id=1"
GitLab SSHD->>+Rails: GET /internal/api/allowed?action=upload_pack&key_id=1
노트 Rails 우측: 인증 확인
Rails-->>-GitLab SSHD: 200 OK, { gitaly: ... }
GitLab SSHD->>+Gitaly: SSHService.SSHUploadPack 요청
Gitaly->>+서버의 Git: git upload-pack 요청
참가자 클라이언트의 Git,서버의 Git: Git 클라이언트와 서버 간의 양방향 통신
서버의 Git-->>-Gitaly: git upload-pack 응답
Gitaly -->>-GitLab SSHD: SSHService.SSHUploadPack 응답
GitLab SSHD-->>-참가자 클라이언트의 Git: ssh git fetch-pack 응답 ```