Overview
gitGost lets you contribute to any GitHub repository anonymously using standard Git commands. No accounts, tokens, or browser extensions required—just add gitGost as a remote and push.
Quick Start
Add gitGost as a remote
Replace username/repo with the target repository: git remote add gost https://gitgost.leapcell.app/v1/gh/username/repo
You can verify your remote was added with git remote -v
Create a branch and make changes
git checkout -b fix-typo
# Make your changes
git add .
git commit -m "fix: typo in documentation"
Your commit message becomes the PR description, so make it detailed! See our commit messages guide for best practices.
Push to open a PR
git push gost fix-typo:main
The PR opens instantly from @gitgost-anonymous with your commits fully anonymized.
Understanding the Remote URL
The gitGost remote URL follows this pattern:
https://gitgost.leapcell.app/v1/gh/{owner}/{repo}
Service URL : https://gitgost.leapcell.app
API Version : /v1
Provider : /gh (GitHub)
Target : {owner}/{repo}
Currently, only GitHub (/gh) is supported. GitLab, Bitbucket, and Codeberg support is planned.
Common Workflows
Contributing a Quick Fix
For simple one-commit fixes:
# Add remote and push in one session
git remote add gost https://gitgost.leapcell.app/v1/gh/torvalds/linux
git checkout -b fix-gpio-mapping
git commit -am "fix: correct GPIO pin mapping in driver
The BCM2835 GPIO mapping was incorrect for pins 23-27.
This fixes the issue by updating the register offsets."
git push gost fix-gpio-mapping:main
Working on Multiple Contributions
Manage multiple anonymous PRs to different repositories:
# In repo-one/
cd ~/projects/repo-one
git remote add gost https://gitgost.leapcell.app/v1/gh/org/repo-one
git push gost feature-x:main
# In repo-two/
cd ~/projects/repo-two
git remote add gost https://gitgost.leapcell.app/v1/gh/org/repo-two
git push gost feature-y:main
Testing Changes Locally First
Before pushing anonymously, test your changes:
# Work on your feature
git checkout -b new-feature
# ... make changes ...
git commit -am "feat: add new capability"
# Test locally (if applicable)
npm test
npm run build
# Push anonymously once tests pass
git push gost new-feature:main
What Happens During a Push
When you push to gitGost, the service:
Receives your commits
gitGost accepts the packfile from your Git client using the Smart HTTP protocol.
Strips identifying metadata
All author information, committer details, and timestamps are replaced: // From internal/git/receive.go
anonSignature := object . Signature {
Name : "@gitgost-anonymous" ,
Email : "[email protected] " ,
When : time . Now (),
}
Creates a fork
A fork is created under the @gitgost-anonymous bot account if one doesn’t exist.
Pushes anonymized commits
The rewritten commits are pushed to the fork on a new branch.
Opens a PR
A pull request is created from the fork to the original repository.
Your original commit message is preserved in the PR description, but all authorship metadata is removed from the Git history.
Push Response
After a successful push, you’ll see:
remote: gitGost: Processing your anonymous contribution...
remote: gitGost: Commits anonymized successfully
remote: gitGost: Creating fork...
remote: gitGost: Fork ready at gitgost-anonymous/repo
remote: gitGost: Pushing to fork...
remote: gitGost: Branch 'gitgost-1234567890' created
remote: gitGost: Creating pull request...
remote:
remote: ========================================
remote: SUCCESS! Pull Request Created
remote: ========================================
remote:
remote: PR URL: https://github.com/owner/repo/pull/123
remote: Author: @gitgost-anonymous
remote: Branch: gitgost-1234567890
remote: PR Hash: a3f8c1d2
remote:
remote: Subscribe to PR notifications (no account needed ):
remote: https://ntfy.sh/gitgost-pr-a3f8c1d2
remote:
remote: To update this PR on future pushes, use:
remote: git push gost < branc h > :main -o pr-hash=a3f8c1d2
Branch Naming
By default, gitGost generates unique branch names:
For example: gitgost-1709678123
This ensures no branch name conflicts and makes each contribution independent.
Updating Your Remote
You can update the gitGost remote URL if needed:
# Update existing remote
git remote set-url gost https://gitgost.leapcell.app/v1/gh/new-owner/new-repo
# Or remove and re-add
git remote remove gost
git remote add gost https://gitgost.leapcell.app/v1/gh/owner/repo
Removing the Remote
When you’re done:
Service Limits
gitGost enforces reasonable limits to prevent abuse:
Rate Limit 5 PRs per IP per hour Prevents spam while allowing legitimate contributions.
Repository Size ≤ 500 MB The target repository must be under 500 MB.
Commit Size ≤ 10 MB per commit Individual commits must be under 10 MB.
Validation Full validation All refs and objects are validated for security.
If you exceed the rate limit, you’ll receive an error message. Wait an hour and try again, or use Tor integration to mask your IP.
Troubleshooting
Push Failed: Repository Not Found
The target repository doesn’t exist or is private:
error: RPC failed ; HTTP 404
Solution : Verify the repository exists and is public. gitGost only works with public repositories.
Push Rejected: Rate Limit Exceeded
remote: Rate limit exceeded: max 5 PRs per hour per IP.
remote: Please try again later.
Solution : Wait one hour, or use Tor to route through a different IP.
Authentication Required
gitGost doesn’t require authentication. If you see auth prompts, verify your remote URL:
git remote -v
# Should show: gost https://gitgost.leapcell.app/v1/gh/owner/repo
Next Steps
Anonymous Push Deep dive into how anonymous pushing works
Commit Messages Write effective commit messages for anonymous PRs
Tor Integration Hide your IP address with Tor
API Reference Technical details of the Git protocol