Skip to main content

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

1

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
2

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.
3

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:
1

Receives your commits

gitGost accepts the packfile from your Git client using the Smart HTTP protocol.
2

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(),
}
3

Creates a fork

A fork is created under the @gitgost-anonymous bot account if one doesn’t exist.
4

Pushes anonymized commits

The rewritten commits are pushed to the fork on a new branch.
5

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 <branch>:main -o pr-hash=a3f8c1d2

Branch Naming

By default, gitGost generates unique branch names:
gitgost-{timestamp}
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:
git remote remove gost

Service Limits

gitGost enforces reasonable limits to prevent abuse:

Rate Limit

5 PRs per IP per hourPrevents spam while allowing legitimate contributions.

Repository Size

≤ 500 MBThe target repository must be under 500 MB.

Commit Size

≤ 10 MB per commitIndividual commits must be under 10 MB.

Validation

Full validationAll 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

Build docs developers (and LLMs) love