প্রথমবার যখন কেউ আমাকে তাঁর Pull Request Review করতে বলেছিলাম, এক Tab-এ GitHub Open করলাম, আরেক Tab-এ Slack। বুঝলাম Code Actually Run করব কীভাবে সেটা জানি না। শেষ পর্যন্ত Manually তাঁর Fork Clone করলাম, Branch Name খুঁজলাম, আর Local Repo Mess করে ফেললাম। এর চেয়ে ভালো কোনো Way ছিল।
পরে দুইটা Way পেলাম — আর কয়েক বছর ধরে দুইটাই Use করছি।
Code Review-এর Problem
GitHub-এর Web Interface ছোটখাটো Diffs-এর জন্য চলে। কিন্তু Code Actually Run করতে হলে — সেই Endpoint Test করতে, UI Fix Verify করতে, বা Debug করতে কেন Test Fail করছে — তখন PR Locally দরকার।
Default Workflow টা Awkward: Author-কে Message করে Fork URL আর Branch Name নেওয়া, নাহলে GitHub-এর UI-তে Click করে খোঁজা। দুইটাই Slow।
আমি যা চেয়েছিলাম তা: PR Number টাইপ করো, Code পাও।
Method 1: Git Config (আমার 80% Review)
.git/config-এ [remote "origin"]-এর নিচে এটা Add করো:
fetch = +refs/pull/*/head:refs/remotes/github-pr/*এখন git fetch সব PR Pull করে:
* [new ref] refs/pull/1015/head -> github-pr/1015
* [new ref] refs/pull/1020/head -> github-pr/1020যেকোনো PR Checkout করো:
git checkout github-pr/1015তুমি এখন PR-এর Exact Commit-এ। হ্যাঁ, এটা Detached HEAD। হ্যাঁ, Changes Push back করতে চাইলে Mildly Annoying। কিন্তু Code Read করা আর Test Run করার জন্য — যেটা আমার বেশিরভাগ Review — আমি Care করি না। এটা যেকোনো Machine-এ কাজ করে যেখানে Git আছে, পুরোনো Server-েও যেখানে নতুন Tool Install করা Nightmare।
Detached HEAD কখনও কখনও Feature। কারো PR-তে Accidentally Commit করা থেকে বাঁচায় যখন Explore করছি।
Method 2: GitHub CLI (যখন Power দরকার)
কখনও কখনও আরো দরকার হয়। হয়তো PR-তে Fixes Push back করতে চাও — Typo Fix করো, Push করো, তারা Merge করে, সবাই Happy। নাহলে Proper Branch Tracking চাও।
GitHub CLI Install করো, একবার gh auth login দিয়ে Authenticate করো, তারপর:
gh pr checkout 1015এটা Proper Branch Names, Remote Tracking, আর Fork Automatic Handle করে। Push কাজ করে কারণ gh Upstream Configure করে দেয়।
আমি gh pr list ও Use করি GitHub-এর Slow Interface Load না করে Open PRs Scan করতে। তারপর Interesting লাগলে Checkout করি।
বিরক্তিকর Part
আরেকটা Tool Install করা। SSH দিয়ে Server-এ থাকলে আরেকটা Break হওয়ার জিনিস। আরেকটা Auth Token Manage করা। gh যখন কাজ করে, Great। যখন কাজ করে না, তুমি OAuth Flow Debug করছো Code Review করার পরিবর্তে।
আরেকবার gh Auto-updated হলো আর দুই দিন Shell Integration Break করলো। Fun নয় যখন Ship করতে হচ্ছে।
আমার Actual Workflow
Quick Review — শুধু Reading আর Testing:
git fetch
git checkout github-pr/420
go test ./...
git checkout mainReview যেখানে Fix করতে হবে:
git checkout main # Clean Start
gh pr checkout 420 --branch review-420
# ... Bug Fix করো ...
git commit -am "fix: handle nil pointer"
git push # Automatic তাদের PR-তে Push হয়
gh pr review 420 --approveCLI Shine করে যখন Changes করো। শুধু Code Read করার জন্য? Overkill।
যে Cost কেউ বলে না
একটা Edge Case Hit করেছিলাম একবার: Git Config Method প্রতি Fetch-এ সব PR Pull করে। যদি Repo-তে 500 Open PR থাকে, সেটা অনেক Refs। git fetch Slow হয়ে যায়। git branch -a Unreadable হয়ে যায়।
সেই Case-এ gh Use করো। এটা শুধু যা দরকার তাই Checkout করে।
Normal repos-এ 20-50 PR থাকলে? Who cares। সব Fetch করো।
Meta description: GitHub Pull Request Locally Checkout করার দুইটা Practical Method: Git Config Trick দ্রুত Review-এর জন্য, আর GitHub CLI যখন Changes Push back করতে হয়।
