🐷
GitHub CLI(ghコマンド)でIssueを別リポジトリにスムーズに移動する方法
はじめに
GitHubやZenHubでプロジェクト管理していると、組織変更などに伴い、別リポジトリにIssueを移動したいシーンが出てきます。
しかし、Issueを直接移動する機能はありません。
本記事では、GitHub CLI(gh コマンド)を使って、Issueをスムーズにコピー&移動する方法を紹介します。
どんなときに役立つか
- 数十件以上のIssueをまとめて移動したい
- Issueについたラベルも引き継ぎたい
- クローズ済みのIssueは移行したくない
- 元のIssueに移動したことを残したい
手順
セットアップ
GitHub CLI が未インストールの場合は、以下の手順でセットアップします。
# macOS(Homebrew)
brew install gh
# Ubuntu(Debianベース)
sudo apt install gh
# Windows(Scoop)
scoop install gh
次に、GitHub アカウントと連携します。
gh auth login
Issue を別のリポジトリに移動するスクリプト
- OLD_REPOは移行元、NEW_REPOは移行先リポジトリを指定してください。
- github.comを指定しているので、自社ホスティングされば適宜変更してください
#!/bin/bash
OLD_REPO="YOUR_ORG/YOUR_OLD_REPO"
NEW_REPO="YOUR_ORG/YOUR_NEW_REPO"
# オープンな Issue を取得(クローズ済みを除外)
ISSUE_NUMBERS=($(gh issue list --repo "$OLD_REPO" --state open --json number --jq '.[].number'))
for ISSUE in "${ISSUE_NUMBERS[@]}"; do
# 元のIssue情報を取得(タイトル、本文、ラベル)
ISSUE_DATA=$(gh issue view "$ISSUE" --repo "$OLD_REPO" --json title,body,labels)
TITLE=$(echo "$ISSUE_DATA" | jq -r '.title')
BODY=$(echo "$ISSUE_DATA" | jq -r '.body')
# ラベルを配列に変換
LABELS=$(echo "$ISSUE_DATA" | jq -r '[.labels[].name] | join(",")')
# 新しいリポジトリにIssueを作成
if [[ -n "$LABELS" ]]; then
NEW_ISSUE_URL=$(gh issue create --repo "$NEW_REPO" --title "$TITLE" --body "$BODY\n\n---\n[元のIssue](https://github.com/$OLD_REPO/issues/$ISSUE)" --label "$LABELS" --json url)
else
NEW_ISSUE_URL=$(gh issue create --repo "$NEW_REPO" --title "$TITLE" --body "$BODY\n\n---\n[元のIssue](https://github.com/$OLD_REPO/issues/$ISSUE)" --json url)
fi
# 新しい Issue 番号を取得
NEW_ISSUE_NUMBER=$(echo "$NEW_ISSUE_URL" | jq -r '.url' | awk -F'/' '{print $NF}')
# 元のIssueに「移動しました」コメントを追加
gh issue comment "$ISSUE" --repo "$OLD_REPO" --body "このIssueは [新しいIssue](https://github.com/$NEW_REPO/issues/$NEW_ISSUE_NUMBER) に移動しました。"
# 元のIssueをクローズ
gh issue close "$ISSUE" --repo "$OLD_REPO"
echo "Issue #$ISSUE を移動しました(新しいIssue #$NEW_ISSUE_NUMBER)"
done
スクリプトの解説
- オープンなIssueのみ取得(--state open)
- タイトル、本文、ラベルを取得し、新しいIssueとして作成
- 元のIssueに移動先のリンクをコメントとして追加
- 元のIssueをクローズ
スクリプトの使い方
nano move_issues.sh
# スクリプトをコピペして保存
chmod +x move_issues.sh
./move_issues.sh
おわりに
この方法を使えば、GitHubのIssueをスムーズに別リポジトリへ移動できます。
大量のIssueを移動する場合は、ぜひこのスクリプトを活用してください。
Discussion