Readme
gh-export
A fast and reliable GitHub repository exporter written in Rust. Export all repositories from a GitHub user account with a single command.
Features
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
Installation
From source
git clone https://github.com/guitaripod/gh-export
cd gh-export
cargo install -- path .
From crates.io
cargo install gh-export
Quick Start
First run - Interactive setup:
gh-export
The 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
Usage
Basic Commands
# 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
Configuration Management
# 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
Advanced Options
# 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 --verbose
GitHub Token
You'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
Directory Structure
Repositories are organized by username:
output_directory/
├── username/
│ ├── repo1/
│ ├── repo2/
│ └── . gh- export- metadata. json
Configuration
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 = false
Environment Variables
GITHUB_TOKEN - GitHub personal access token (overrides config file)
Building from Source
Requirements:
git clone https://github.com/guitaripod/gh-export
cd gh-export
cargo build -- release
The binary will be in target/ release/ gh- export .
License
MIT License - see LICENSE file for details.