GitLabしたい(glab)
// ログイン
$ glab auth login
// イシューの確認
$ glab issue list
$ glab issue view issue番号
// ブランチを作成
$ glab issue checkout issue番号
// MRドラフトを作成
$ glab mr create --draft --fill
$ glab mr view --web
glabでGitLabリポジトリを操作できます。
プロジェクトの.git/configから自動でリポジトリを判別して、操作対象にしてくれます。
インストールしたい
$ brew install glab
ログインしたい(glab auth)
// ログイン
$ glab auth login
// ログアウト
$ glab auth logout
// 確認
$ glab auth status
glabをはじめて使う場合は、認証が必要です。
認証には、ウェブ認証とトークン認証があります。
ちょっと使いたい場合はウェブ認証、 しっかり使いたい場合はトークン認証で設定するとよいです。
注釈
トークン認証にはGitLab上でPAT(Personal Access Token)を作成する必要があります。 トークンはページ上に1度しか表示されません。 もし、コピーに失敗した場合は、そのトークンを削除して、新しいトークンを作成してください。
トークンは「目的ごと」に個別に作成することが推奨されています。
何に使われているトークンか後から思い出しやすくするため、
トークン名は用途-機器名-作成日のような規則で命名するとよいです。
ウェブ認証したい
$ glab auth login --hostname gitlab.com
- Signing into gitlab.com
? How would you like to sign in? # [Web | Token]
// Webを選択 -> ブラウザで承認
? What domains ...(省略)...? # [gitlab.com,gitlab.com:443,registry.gitlab.com]
// そのまま空欄でEnter
? Choose default protocol: # [SSH | HTTPS | HTTP]
// SSHを選択
✓ Configured Git protocol.
✓ Configured API protocol.
✓ Logged in as <username>
✓ Configuration saved to /Users/<username>/.config/glab-cli
ウェブ認証を設定したときのログです。
--hostname gitlab.comで、GitLabホストをgitlab.comに指定して、loginコマンドを実行しました。
プロンプトが表示されたので、そのまま対話的に選択して進めました。
認証方法でWebを選択しました。
ブラウザが起動したので、画面にしたがって承認しました。
ドメイン選択では、そのままEnterを押しました。
デフォルト値([giblab.com,gitlab.com:443,registory.gitlab.com])が設定されました。
GitプロトコルはSSHを選択しました。
設定した内容が~/.config/glab-cli/config.ymlに保存されました。
注釈
GitLabプロトコルはSSHもしくはHTTPSから選択します。
HTTPは選択してはいけません。
また、SSHを選択する場合、あらかじめGitLabにSSH鍵を登録しておく必要があります。
ちょっと使いたい場合はHTTPSでも構いません。
トークン認証したい
$ glab auth login --hostname gitlab.com
- Signing into gitlab.com
? How would you like to sign in? # [Token | Web]
// Tokenを選択
? What domains does this host use for the container registry and image dependency proxy? # [gitlab.com,gitlab.com:443,registry.gitlab.com]
// そのまま空欄でEnter
? Paste your authentication token: ************************** // GitLabで生成したPATをペースト
? Choose default Git protocol: # [SSH | HTTPS | HTTP]
// SSHを選択
✓ Configured Git protocol.
✓ Configured API protocol.
✓ Logged in as <username>
✓ Configuration saved to /Users/<username>/.config/glab-cli/config.yml
(あとで実行した結果を載せる) (トークンはほぼ同時にGitLab上で作成して待機しておくとよさそう)
注釈
トークンにはapiとwrite_repository権限を付与する必要があります。
設定プロンプトで表示されるTipのURLをコピペしてアクセスすると、2つの権限にチェックの入った状態のページが表示されます。
Tip: generate a personal access token at https://gitlab.com/-/user_settings/personal_access_tokens?scopes=api,write_repository.
The minimum required scopes are 'api' and 'write_repository'.
イシューしたい(glab issue)
// イシューを確認
$ glab issue list # オープンなイシュー覧
$ glab issue list --all # すべてのイシュー一覧(open/closed)
$ glab issue list --search "SEARCH_WARD" # キーワード検索
$ glab issue list --label "bug,enhancement" # ラベル検索
// イシューを表示
$ glab issue view <issue_id> # イシューの詳細
$ glab issue view <issue_id> --web # ブラウザで開く
$ glab issue note <issue_id> --message "comment" # コメントを追加
$ glab issue note <issue_id> # エディタを開く
// イシューを作成
$ glab issue create # イシューを作成(interactive)
$ glab issue create --title "title" --description "desc"
// イシューを更新
$ glab issue update <id> --title "new title"
$ glab issue update <id> --description = "new desc"
$ glab issue update <id> --assignee @username
$ glab issue update <id> --label "bug,high"
// イシューの状態管理
$ glab issue close <id>
$ glab issue reopen <id>
$ glab issue delete <id>
$ glab issue subscribe <id>
$ glab issue unsubscribe <id>
glab issueでイシューを操作できます。
さらにサブコマンドを持ち、
listでイシューの一覧を取得し、
view 番号でイシューの詳細を確認できます。
createで新しいイシューを作成できます。
Tip
viewとcreateは--webオプションでブラウザが開きます。
ターミナルより、ブラウザのほうが確認しやすいと思います。
マージリクエストしたい(glab mr)
// MRを確認
$ glab mr list
$ glab mr list --all
// MRの詳細
$ glab mr view <mr_id>
$ glab mr view <mr_id> --web
$ glab mr note <mr_id> --message "comment"
// MRを作成
$ glab mr create
$ glab mr create --title "feat: add feature" --description "Close #123"
$ glab mr create --draft
$ glab mr create --target-branch develop
// MRの状態管理
$ glab mr approve <mr_id>
$ glab mr merge <mr_id>
$ glab close <mr_id>
$ glab reopen <mr_id>
$ glab revoke <mr_id>
$ glab delete <mr_id>
$ glab subscribe <mr_id>
$ glab unsubscribe <mr_id>
glab mrコマンドでマージリクエスト(MR)を操作できます。
glab mrでマージリクエスト(MR)を操作ができます。
さらにサブコマンドを持ち、
listでMRの一覧を取得し、
view 番号でMRの詳細を確認できます。
createで新しいMRを作成できます。
// 作業ブランチに移動
$ git switch ブランチ名
$ glab mr create --draft --fill
git switchで作業ブランチに移動し、glab mr createで新しいMRを作成できます。
--draftオプションでMRドラフトを作成できます。
--fillオプションでコミットメッセージからタイトルと本文を自動入力してくれます。
$ git add ファイル名
$ git commit
$ git fetch origin
$ git merge origin/main # or git rebase origin/main
$ git push # or git push -u origin ブランチ名
ローカルにあるリポジトリの操作は、いつも通りgitを使います。
パイプラインしたい(glab ci)
$ glab ci status
$ glab ci view --web
glab ciでパイプラインを操作できます。
ワークフロー
# 新issueを起票(「なぜやるのか」→「なにをやるのか」を明確にする)
$ glab issue create \
--title "Add feature" \
--description "## 概要 ...\n\n## 具体的 ..." \
--label "Type::Feature" \
--label "Priority::High"
# 既存のissueを確認
$ glab issue list --assignee <username>
$ glab issue view <id>
# worktreeを作成
$ git fetch origin
$ git worktree add -B <branch-name> worktrees/<branch-name> origin/main
$ cd worktrees/<branch-name>
(worktrees/branch-name)$ git push -u origin <branch-name>
# コーディング
# Make changes
(worktrees/branch-name)$ git add --all
(worktrees/branch-name)$ git commit -m "feat: summary (refs #<id>)"
(worktrees/branch-name)$ git push
# パイプラインの確認
(worktrees/branch-name)$ glab ci status
(worktrees/branch-name)$ glab pipeline list
# マージリクエスト(下書き)を作成
# パイプラインが成功したら、MRの下書きを作成
(worktrees/branch-name)$ glab mr create \
--source-branch <branch-name> \
--target-branch main \
--title "feat: title"
--fill \
--draft \
--assignee @me
(worktrees/branch-name)$ glab mr view --web
# レビュー対応
# Fix feedbacks
(worktrees/branch-name)$ git add -A
(worktrees/branch-name)$ git commit -m "fix: address review comments (refs #id)"
(worktrees/branch-name)$ git push
# マージリクエストを更新
$ glab mr update <id> \
--description "## 概要...\n\n## 変更点 ...\n\nCloses #<id>"
--ready
$ glab mr view <id>
# マージ
$ glab mr merge --delete-source-branch
# 片付け
$ git worktree remove worktrees/<branch-name>
$ git fetch --prune
$ git worktrees prune
$ git branch -d <branch-name>