GitLabのプライベートリポジトリから複数人で使うサーバ上へgit pullする機会がありましたが、ちょっと悩んだためメモを残します。
目次
環境
- GitLab.comのプライベートリポジトリ
- GitLabアカウントには2FA設定済
困ったこと
そのサーバのgit remoteには、GItLabのプライベートリポジトリにhttpsでアクセスするoriginが設定してありました。
ただ、自分のアカウントでgit pullしようとしても
- 自分のGitLabアカウントには2FAを設定済
- httpsでのcloneができない
- 複数人使うサーバなので、自分のGitLabアカウントのSSH鍵を置きたくない
- sshでのcloneはあきらめる
- 同様に、GitLabのPersonal Access Tokenも使いたくない
git clone https://oauth2:token@gitlab.com/user/project.git
のような形式- Scopeを狭めたとしても、Personal Access Tokenがgit remoteに残るのはちょっと...
という状況であり、困っていました。
対応
GitLabのドキュメントを読んだところ、 Deploy Token
がありました。
Deploy Tokens | GitLab
ドキュメントを読むと、リポジトリ単位でScopeを決めてトークンを発行できるようです。
今回、サーバ上で操作する全員がGitLab上のプライベートリポジトリへのアクセス権を持っていたため、サーバ上にDeploy Tokenを書いてあっても問題ありませんでした。
また、deploy token用にgit remoteの差し替えが必要そうでしたが、こちらも特に問題なさそうでした。
そこで、deploy tokenを試してみることにしました。
まずはドキュメントに従い、GitLabのプライベートリポジトリに、deploy tokenを設定します。
今回はcloneできれば良いので、Scopeは read_repository
にしました。
続いて、サーバ上でgit remoteを差し替えます。
# git remoteの差し替え $ git remote set-url origin https://<deploy token用ユーザー>:<deploy token>@gitlab.com/<グループ(ユーザー)>/<リポジトリ>.git # 確認 $ git remote -v origin https://<deploy token用ユーザー>:<deploy token>@gitlab.com/<グループ(ユーザー)>/<リポジトリ>.git (fetch) origin https://<deploy token用ユーザー>:<deploy token>@gitlab.com/<グループ(ユーザー)>/<リポジトリ>.git (push)
最後にgit pullしたところ、問題なく動作しました。
$ git pull remote: Enumerating objects: 12, done. remote: Counting objects: 100% (12/12), done. remote: Compressing objects: 100% (12/12), done. remote: Total 12 (delta 4), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (12/12), done. From https://gitlab.com/<グループ(ユーザー)>/<リポジトリ> * [new branch] yy-zzz -> origin/<ブランチ名> xxxxxxx..xxxxxxx master -> origin/master