Git-Grab is a helper tool that clones repositories into a structured directory layout so you do not have to remember where projects live.
- Worktree-first cloning workflow (standard clone available)
- Structured paths by host and owner
- Add a remote to existing local clones
- Optional temp directory cloning
code
└── github.com
└── Boomatang
├── dotfiles
└── git-grab
git must be installed before using git-grab.
- Download the latest release archive for your OS/arch.
- Extract it and move the
grabbinary somewhere on yourPATH. - Verify:
grab --version
- Install Zig (matching the version supported by this repo).
- From the repository root, build the binary:
zig build -Doptimize=ReleaseSafe
- The binary is created at:
zig-out/bin/grab
- Optional: run it directly via Zig:
zig build run -- <args>
grab <REPO>...
grab --remote <REPO>...
grab --standard <REPO>...
grab --help
grab --version
The Zig port expects SSH-style repo URLs that start with git and end in .git,
for example:
git@github.com:Boomatang/git-grab.git
GRAB_PATH sets the default base directory for storing repos. You can override
it per run with --path.
--temp downloads to the OS temp directory instead of GRAB_PATH or --path.
--temp and --path are mutually exclusive.
Default behavior uses a worktree-based clone. For a standard clone, use
--standard.
grab <REPO>
grab --standard <REPO>Override the path at run time:
grab <REPO> --path <some/other/path>--remote treats the repo URL as a remote to add to existing clones with the
same repo name under the configured path.
grab --remote <REPO>Search a specific path:
grab --remote <REPO> --path <some/other/path>All matching is case-sensitive, which can be problematic when adding remotes.
On new changes a news fragment is required. Create one interactively with:
zig build changie:add
This places a YAML fragment in .changes/unreleased/.
The available change kinds are: Added, Changed, Deprecated, Removed, Fixed, Security.
- Ensure the version in
build.zig.zonis correct for this release. - Batch the unreleased fragments into a versioned changelog file:
zig build changie:batch
- Review the generated file in
.changes/for the release version. - Merge all versioned changelogs into
CHANGELOG.md:
zig build changie:merge
- Commit changes.
- Build release artifacts:
zig build release
- Create a GitHub release for the current commit with the release version as the tag.
- Release notes should be the changelog entry for that version.
- Attach all artifacts from
dist/to the GitHub release.