jetti 0.1.0

A fast, cross-platform tool for organizing git repositories
jetti-0.1.0 is not a library.

jetti

A fast, cross-platform tool for organizing git repositories into a consistent directory structure by host, owner, and repo name.

Install

cargo install jetti

Requires git in your PATH.

Usage

Clone a repository

# GitHub (default host, SSH by default)
jetti clone owner/repo

# Explicit host
jetti clone gitlab.com/owner/repo
jetti clone codeberg.org/owner/repo

# Full URLs — protocol is inferred
jetti clone https://github.com/owner/repo.git
jetti clone git@github.com:owner/repo.git

# Shallow clone
jetti clone owner/repo --shallow

# Force HTTPS
jetti clone owner/repo --https

# Force SSH (useful when config defaults to HTTPS)
jetti clone owner/repo --ssh

Repositories are cloned to <root>/<host>/<owner>/<repo>:

~/dev/
├── github.com/
│   └── rust-lang/
│       └── log/
├── gitlab.com/
│   └── user/
│       └── project/
└── codeberg.org/
    └── user/
        └── repo/

List repositories

jetti list                              # tree view in terminal
jetti list --full-path                  # absolute paths (flat)
jetti list -p github.com/rust-lang      # filter by prefix
jetti list | fzf                        # fuzzy find (auto-flat)

Fetch and update

jetti fetch                 # git fetch all repos in parallel
jetti update                # fetch + fast-forward (safe, skips dirty repos)
jetti update -p github.com  # filter by prefix
jetti fetch -j 16           # 16 parallel jobs

Status dashboard

jetti status                # branch, dirty files, ahead/behind for all repos
jetti status -p github.com  # filter by prefix

Remove a repository

jetti rm owner/repo           # prompts for confirmation
jetti rm owner/repo --force   # skip confirmation

Configuration

jetti config          # show current settings
jetti config init     # create default config file
jetti config edit     # open in $EDITOR

Config file at ~/.config/jetti/config.toml:

root = "/home/user/dev"
default_host = "github.com"
protocol = "ssh"

[[hosts]]
name = "github.com"
ssh_prefix = "git@github.com:"
https_prefix = "https://github.com/"

Shell completions

Add one of the following to your shell configuration:

# Bash (add to ~/.bashrc)
eval "$(jetti completions bash)"

# Zsh (add to ~/.zshrc)
eval "$(jetti completions zsh)"

# Fish (add to ~/.config/fish/config.fish)
jetti completions fish | source

Shell integration

Jump to a repo with fzf:

# Add to .bashrc / .zshrc
j() {
  local dir
  dir=$(jetti list --full-path | fzf) && cd "$dir"
}

Clone and cd in one step:

jc() {
  cd "$(jetti clone "$@")"
}

License

MIT