{"id":22334833,"url":"https://github.com/zbiljic/fget","last_synced_at":"2026-02-12T09:02:20.497Z","repository":{"id":77469909,"uuid":"585218702","full_name":"zbiljic/fget","owner":"zbiljic","description":"Remote repositories manager","archived":false,"fork":false,"pushed_at":"2026-02-07T22:28:07.000Z","size":228,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-08T05:49:50.824Z","etag":null,"topics":["cli","git"],"latest_commit_sha":null,"homepage":"","language":"Go","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/zbiljic.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-04T16:06:00.000Z","updated_at":"2026-02-07T22:28:10.000Z","dependencies_parsed_at":"2023-10-16T12:11:53.626Z","dependency_job_id":"770d4206-e7ac-447a-8c4f-29a2b4fd5831","html_url":"https://github.com/zbiljic/fget","commit_stats":{"total_commits":170,"total_committers":2,"mean_commits":85.0,"dds":"0.41764705882352937","last_synced_commit":"82113be17f5d10b32b5f43d170f1af0c35feb763"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zbiljic/fget","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zbiljic%2Ffget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zbiljic%2Ffget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zbiljic%2Ffget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zbiljic%2Ffget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zbiljic","download_url":"https://codeload.github.com/zbiljic/fget/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zbiljic%2Ffget/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29362201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cli","git"],"created_at":"2024-12-04T05:09:58.592Z","updated_at":"2026-02-12T09:02:20.467Z","avatar_url":"https://github.com/zbiljic.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fget\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/zbiljic/fget)](https://goreportcard.com/report/github.com/zbiljic/fget)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/zbiljic/fget/golangci-lint.yml?branch=main)](https://github.com/zbiljic/fget/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**`fget` is a fast, concurrent, and opinionated CLI for managing all your local Git repositories.**\n\nDo you have hundreds or thousands of repos cloned locally? Keeping them updated, fixing broken default branches, and cleaning up old objects is a chore. `fget` automates this with a set of powerful, concurrent commands.\n\n## Features\n\n-   **Fast \u0026 Concurrent:** `fget` performs operations on many repositories in parallel using a worker pool, making it significantly faster than sequential scripts.\n-   **Smart `clone`:** Clones repositories into a clean, predictable `host/user/repo` directory structure.\n-   **Powerful `update`:** Fetches updates for all repos in a directory tree. It's built to be resilient, with sophisticated retry logic for network issues.\n-   **Resumable Progress:** Long-running commands like `update`, `fix`, and `gc` save their state. If you cancel the operation, you can run the same command again to resume where you left off.\n-   **Automated `fix`:** This is the killer feature. `fget fix` automatically:\n    -   Detects if a remote's default branch has changed (e.g., `master` to `main`) and updates your local clone to match.\n    -   Resets your local branch to match the remote if it's behind, avoiding non-fast-forward errors.\n    -   Cleans up dirty working directories.\n    -   Repairs broken or invalid local references.\n-   **Moved Repository Detection:** If a repository moves on the server (e.g., a user or organization rename on GitHub), `fget` detects the HTTP redirect and automatically renames your local directory and updates the remote URL.\n-   **Efficient `gc`:** Run `git gc` concurrently across all your repositories to optimize their local storage.\n-   **Single Binary:** No dependencies, no runtime. Just a single executable file.\n\n## Installation\n\n### With `go`\n\nThe easiest way to install `fget` is using `go install`:\n\n```sh\ngo install github.com/zbiljic/fget@latest\n```\n\nEnsure that your `GOBIN` is in your system's `PATH` (e.g., `export PATH=$PATH:$(go env GOBIN)`) to run `fget` directly from your terminal.\n\n### Building from source\n\nAlternatively, you can clone the repository and build `fget` yourself. This method requires `make`.\n\n```bash\ngit clone https://github.com/zbiljic/fget.git\ncd fget\nmake install\n```\n\nThe `make install` command will compile the `fget` executable and place it in your `GOBIN` directory.\n\n## Usage\n\n`fget` operates on a root directory containing your projects. If you don't specify a path, it will use the current working directory.\n\n### `clone`: Clone one or more repositories\n\n`fget` will automatically create the directory structure based on the repository's URL.\n\n```sh\n# Clones into ./github.com/zbiljic/fget\nfget clone https://github.com/zbiljic/fget.git\n# or just\nfget https://github.com/zbiljic/fget\n\n# Clone multiple repos into a specific directory, e.g. ~/src\nfget clone https://github.com/spf13/cobra https://github.com/pterm/pterm ~/src\n# This will create:\n# ~/src/github.com/spf13/cobra\n# ~/src/github.com/pterm/pterm\n```\n\n### `update`: Update all repositories\n\nThis command (aliased as `up`) recursively finds all Git repositories under the target path and fetches the latest changes from their remotes.\n\n```sh\n# Update all repositories in ~/src using 16 parallel workers\nfget update ~/src --workers 16\n\n# Only print projects that were actually updated\nfget up --only-updated\n```\n\n### `fix`: Fix inconsistencies\n\nThis is the most powerful command. It runs a series of checks and repairs on all your repositories.\n\n```sh\n# Inspect and fix all repositories under ~/src\nfget fix ~/src\n\n# Example: A repo's default branch was renamed from 'master' to 'main'\n# `fget fix` will handle this automatically:\n#\n# [/] (active: 1)\n# /home/user/src/github.com/some/repo\n# ℹ github.com/some/repo\n# └ main\n# ! update HEAD 'main': success\n```\n\n### `gc`: Optimize repositories\n\nThis runs `git gc --prune=all` to clean up and optimize the local repositories.\n\n```sh\n# Run garbage collection on all repositories under ~/src\nfget gc ~/src\n```\n\n### `list`: List all managed repositories\n\nThis command (aliased as `ls`) finds and prints the project identifiers for all local repositories.\n\n```sh\nfget list ~/src\n# Output:\n# github.com/zbiljic/fget\n# github.com/spf13/cobra\n# github.com/pterm/pterm\n```\n\n## Contributing\n\nContributions are welcome!\n\n1.  Fork the repository.\n2.  Create a new feature branch.\n3.  Make your changes.\n4.  Ensure all checks pass by running `make pre-commit`.\n5.  Submit a pull request.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzbiljic%2Ffget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzbiljic%2Ffget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzbiljic%2Ffget/lists"}