{"id":30318702,"url":"https://github.com/guitaripod/gh-export","last_synced_at":"2025-08-17T20:13:25.147Z","repository":{"id":305109581,"uuid":"1021969674","full_name":"guitaripod/gh-export","owner":"guitaripod","description":"Export all GitHub repositories from a user account","archived":false,"fork":false,"pushed_at":"2025-07-18T09:41:54.000Z","size":33,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-17T11:49:14.884Z","etag":null,"topics":["exporter","github","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guitaripod.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-18T08:37:19.000Z","updated_at":"2025-07-22T09:34:19.000Z","dependencies_parsed_at":"2025-07-18T11:56:46.838Z","dependency_job_id":null,"html_url":"https://github.com/guitaripod/gh-export","commit_stats":null,"previous_names":["guitaripod/gh-export"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/guitaripod/gh-export","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitaripod%2Fgh-export","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitaripod%2Fgh-export/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitaripod%2Fgh-export/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitaripod%2Fgh-export/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guitaripod","download_url":"https://codeload.github.com/guitaripod/gh-export/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guitaripod%2Fgh-export/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270899582,"owners_count":24664720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exporter","github","rust"],"created_at":"2025-08-17T20:13:21.056Z","updated_at":"2025-08-17T20:13:25.114Z","avatar_url":"https://github.com/guitaripod.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gh-export\n\n[![Crates.io](https://img.shields.io/crates/v/gh-export.svg)](https://crates.io/crates/gh-export)\n[![CI](https://github.com/guitaripod/gh-export/workflows/CI/badge.svg)](https://github.com/guitaripod/gh-export/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Downloads](https://img.shields.io/crates/d/gh-export.svg)](https://crates.io/crates/gh-export)\n\n[![Linux](https://img.shields.io/badge/Platform-Linux-orange.svg)](https://github.com/guitaripod/gh-export/releases)\n[![macOS](https://img.shields.io/badge/Platform-macOS-lightgrey.svg)](https://github.com/guitaripod/gh-export/releases)\n[![Windows](https://img.shields.io/badge/Platform-Windows-blue.svg)](https://github.com/guitaripod/gh-export/releases)\n\nA fast and reliable GitHub repository exporter written in Rust. Export all repositories from a GitHub user account with a single command.\n\n## Features\n\n- **Fast parallel downloads** - Clone multiple repositories concurrently\n- **Smart sync** - Update existing clones instead of re-downloading\n- **Progress tracking** - Real-time progress bars for all operations\n- **Secure token storage** - Tokens stored with proper file permissions\n- **Flexible filtering** - Include/exclude archived repos, forks, and more\n- **Resume capability** - Handles interruptions gracefully\n- **Rate limit handling** - Respects GitHub's API limits\n\n## Installation\n\n### From source\n\n```bash\ngit clone https://github.com/guitaripod/gh-export\ncd gh-export\ncargo install --path .\n```\n\n### From crates.io\n\n```bash\ncargo install gh-export\n```\n\n## Quick Start\n\n1. **First run** - Interactive setup:\n```bash\ngh-export\n```\n\nThe tool will guide you through:\n- Creating a GitHub personal access token\n- Configuring the output directory\n- Starting the export\n\n2. **Subsequent runs** - Uses saved configuration:\n```bash\ngh-export\n```\n\n## Usage\n\n### Basic Commands\n\n```bash\n# Export all repositories (interactive setup on first run)\ngh-export\n\n# Export with explicit token\ngh-export --token YOUR_GITHUB_TOKEN\n\n# Export to specific directory\ngh-export --output /path/to/backup\n\n# Sync existing repositories\ngh-export sync\n\n# Show last export status\ngh-export status\n```\n\n### Configuration Management\n\n```bash\n# Show current configuration\ngh-export config show\n\n# Set configuration values\ngh-export config set token YOUR_TOKEN\ngh-export config set output /new/path\ngh-export config set parallel 6\n\n# Clear configuration\ngh-export config clear\n```\n\n### Advanced Options\n\n```bash\n# Include archived repositories\ngh-export --include-archived\n\n# Exclude forked repositories\ngh-export --exclude-forks\n\n# Shallow clone (faster, no history)\ngh-export --shallow\n\n# Adjust parallel downloads (default: 4)\ngh-export --parallel 8\n\n# Filter repositories by name\ngh-export --filter \"rust\"\n\n# Quiet mode\ngh-export --quiet\n\n# Verbose logging\ngh-export --verbose\n```\n\n## GitHub Token\n\nYou'll need a GitHub personal access token with appropriate permissions:\n\n1. Go to [GitHub Settings → Tokens](https://github.com/settings/tokens)\n2. Click \"Generate new token\" → \"Generate new token (classic)\"\n3. Give it a descriptive name (e.g., \"gh-export\")\n4. Select scopes:\n   - `repo` - Full control of private repositories (includes public)\n   - `public_repo` - Access to public repositories only\n5. Click \"Generate token\" and copy it\n\n## Directory Structure\n\nRepositories are organized by username:\n\n```\noutput_directory/\n├── username/\n│   ├── repo1/\n│   ├── repo2/\n│   └── .gh-export-metadata.json\n```\n\n## Configuration\n\nConfiguration is stored in:\n- Linux/macOS: `~/.config/gh-export/config.toml`\n- Windows: `%APPDATA%\\gh-export\\config.toml`\n\nExample configuration:\n\n```toml\ngithub_token = \"ghp_...\"\noutput_directory = \"/home/user/github-backup\"\nparallel_downloads = 4\ninclude_archived = false\nexclude_forks = false\nshallow_clone = false\n```\n\n## Environment Variables\n\n- `GITHUB_TOKEN` - GitHub personal access token (overrides config file)\n\n## Building from Source\n\nRequirements:\n- Rust 1.70 or later\n- Git\n\n```bash\ngit clone https://github.com/guitaripod/gh-export\ncd gh-export\ncargo build --release\n```\n\nThe binary will be in `target/release/gh-export`.\n\n## License\n\nMIT License - see LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguitaripod%2Fgh-export","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguitaripod%2Fgh-export","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguitaripod%2Fgh-export/lists"}