Open2
Git Tips
特定フォルダのコミット一覧
git log --format="%H" -- path/to/target
ファイルに出力
git log --format="%H" -- path/to/target > commits.txt
特定コミットのPR一覧を洗い出し
#!/bin/bash
# 読み込むファイル名(改行区切りでコミットハッシュが書かれているファイル)
COMMIT_FILE="commits.txt"
REPO="owner/repo"
OUTPUT_FILE="pr_numbers.txt"
PROCESSED_COMMITS_FILE=$(mktemp) # 一時ファイルで処理済みコミットを管理
SLEEP_INTERVAL=5 # レートリミット対策用のスリープ時間(秒)
> "$OUTPUT_FILE" # 出力ファイルを初期化
# 処理済みコミットを保存する関数
mark_commit_processed() {
local commit=$1
echo "$commit" >> "$PROCESSED_COMMITS_FILE"
}
# コミットが処理済みかチェックする関数
is_commit_processed() {
local commit=$1
grep -q "^$commit$" "$PROCESSED_COMMITS_FILE"
}
# PRを検索し、PR番号と関連するコミットを取得する関数
get_pr_for_commit() {
local commit_hash=$1
# PRを検索し、PR番号を取得
pr_number=$(gh api -X GET /search/issues -F "q=repo:$REPO $commit_hash" | jq -r '.items[0].number')
# PR番号が取得できた場合のみ処理を進める
if [ -n "$pr_number" ]; then
# PRに含まれるコミットを取得
commit_hashes=$(gh api -X GET "/repos/$REPO/pulls/$pr_number/commits" | jq -r '.[].sha')
# PR番号を出力ファイルに追記
echo "$pr_number" >> "$OUTPUT_FILE"
echo "Commit $commit_hash -> PR $pr_number (Saved to $OUTPUT_FILE)"
# PRに含まれるすべてのコミットを処理済みに記録
for commit in $commit_hashes; do
mark_commit_processed "$commit"
done
else
echo "Commit $commit_hash -> No PR found"
fi
# レートリミット対策でスリープ
sleep "$SLEEP_INTERVAL"
}
# ファイルの各行(コミットハッシュ)をループで処理
while IFS= read -r commit_hash; do
# すでに取得済みのコミットであればスキップ
if is_commit_processed "$commit_hash"; then
echo "Commit $commit_hash is already processed, skipping."
continue
fi
echo "Searching for PR related to commit: $commit_hash"
get_pr_for_commit "$commit_hash"
done < "$COMMIT_FILE"
# 後処理: 一時ファイルの削除
rm "$PROCESSED_COMMITS_FILE"
echo "PR numbers saved to $OUTPUT_FILE"