"Clone" GitHub PRs/issues, locally edit title/description/comments, "push" back to GitHub, and mirror to Gists.
- Sometimes PR and issue descriptions/comments warrant more complex editing than GitHub's web UI comfortably allows.
ghprlets you "clone" PRs and issues locally as Markdown files (including titles and comments), so you can edit them with your favorite IDE, then "push" updates back to GitHub.ghpralso mirrors PR/issue content to Gists, for version control and easy sharing / backing up / syncing across machines.
Examples:
- marin#1773: issue with complex description and comments (e.g.); mirrored to this gist
- marin#1723: PR with complex description, mirrored to this gist
- Clone PR/Issues locally with comments
- Sync bidirectionally between GitHub and local files
- Diff local changes vs remote
- Push updates back to GitHub
- Gist mirroring for version control and sharing
- Comment management - edit and sync PR/issue comments
pip install ghpr-py# Clone a PR or issue (to `gh/123` by default
ghpr clone https://github.com/owner/repo/pull/123
# or
ghpr clone owner/repo#123
# Make edits to:
# - Title / Description: `gh/123/repo#123.md`
# - Comment files: `zNNNNNN-<author>.md` (existing comments) or `new.md` (new comments)
# Show differences (between local "clone" and GitHub)
ghpr diff
# Push changes
ghpr pushTo add a new comment, create a file starting with new and ending in .md:
# Create a draft comment
echo "My comment text" > new.md
# Commit it
git add new.md
git commit -m "Draft comment"
# Push to GitHub (posts the comment and renames to z{id}-{author}.md)
ghpr pushThe push command will:
- Post
new*.mdfiles as comments to GitHub - Create a commit renaming them to
z{comment_id}-{author}.md - Sync to the gist mirror
# Upload image(s) to this issue or PR's Gist mirror, and get markdown URLs
ghpr upload screenshot.png
# Output: Note: GitHub serves gist raw files as application/octet-stream, so images render in markdown but videos won't preview inline. For videos, use GitHub's native drag-drop upload in the web UI instead.
Cloned PRs and issues are stored as:
gh/123/
owner-repo#123.md # Main description
z3404494861-user.md # Comments (ID-author format)
z3407382913-user.md
Since PRs are issues in GitHub's API, we use the same gh/{number}/ pattern for both.
For users who want shorter aliases, ghpr provides shell integration:
Add to your ~/.bashrc or ~/.zshrc:
eval "$(ghpr shell-integration bash)"Add to your ~/.config/fish/config.fish:
ghpr shell-integration fish | sourceAfter enabling shell integration, you get convenient shortcuts:
ghpri # ghpr init
ghpro # ghpr open
ghprog # ghpr open -g
ghprcr # ghpr create
ghprsh # ghpr show
ghprc # ghpr clone
ghprp # ghpr push
ghprl # ghpr pull
ghprd # ghpr diff
# ... and moreSee the full list with:
ghpr shell-integration bash