A fast and reliable GitHub repository exporter written in Rust. Export all repositories from a GitHub user account with a single command.
- Fast parallel downloads - Clone multiple repositories concurrently
- Smart sync - Update existing clones instead of re-downloading
- Progress tracking - Real-time progress bars for all operations
- Secure token storage - Tokens stored with proper file permissions
- Flexible filtering - Include/exclude archived repos, forks, and more
- Resume capability - Handles interruptions gracefully
- Rate limit handling - Respects GitHub's API limits
git clone https://github.com/guitaripod/gh-export
cd gh-export
cargo install --path .cargo install gh-export- First run - Interactive setup:
gh-exportThe tool will guide you through:
- Creating a GitHub personal access token
- Configuring the output directory
- Starting the export
- Subsequent runs - Uses saved configuration:
gh-export# Export all repositories (interactive setup on first run)
gh-export
# Export with explicit token
gh-export --token YOUR_GITHUB_TOKEN
# Export to specific directory
gh-export --output /path/to/backup
# Sync existing repositories
gh-export sync
# Show last export status
gh-export status# Show current configuration
gh-export config show
# Set configuration values
gh-export config set token YOUR_TOKEN
gh-export config set output /new/path
gh-export config set parallel 6
# Clear configuration
gh-export config clear# Include archived repositories
gh-export --include-archived
# Exclude forked repositories
gh-export --exclude-forks
# Shallow clone (faster, no history)
gh-export --shallow
# Adjust parallel downloads (default: 4)
gh-export --parallel 8
# Filter repositories by name
gh-export --filter "rust"
# Quiet mode
gh-export --quiet
# Verbose logging
gh-export --verboseYou'll need a GitHub personal access token with appropriate permissions:
- Go to GitHub Settings → Tokens
- Click "Generate new token" → "Generate new token (classic)"
- Give it a descriptive name (e.g., "gh-export")
- Select scopes:
repo- Full control of private repositories (includes public)public_repo- Access to public repositories only
- Click "Generate token" and copy it
Repositories are organized by username:
output_directory/
├── username/
│ ├── repo1/
│ ├── repo2/
│ └── .gh-export-metadata.json
Configuration is stored in:
- Linux/macOS:
~/.config/gh-export/config.toml - Windows:
%APPDATA%\gh-export\config.toml
Example configuration:
github_token = "ghp_..."
output_directory = "/home/user/github-backup"
parallel_downloads = 4
include_archived = false
exclude_forks = false
shallow_clone = falseGITHUB_TOKEN- GitHub personal access token (overrides config file)
Requirements:
- Rust 1.70 or later
- Git
git clone https://github.com/guitaripod/gh-export
cd gh-export
cargo build --releaseThe binary will be in target/release/gh-export.
MIT License - see LICENSE file for details.