shipit 0.3.0

A CLI for managing git releases
Documentation
███████╗██╗  ██╗██╗██████╗ ██╗████████╗
██╔════╝██║  ██║██║██╔══██╗██║╚══██╔══╝
███████╗███████║██║██████╔╝██║   ██║
╚════██║██╔══██║██║██╔═══╝ ██║   ██║
███████║██║  ██║██║██║     ██║   ██║
╚══════╝╚═╝  ╚═╝╚═╝╚═╝     ╚═╝   ╚═╝

Shipit is a Rust CLI that automates merge request creation on your favorite platforms with optional AI-generated notes | gitshipit.net

Buy Me A Coffee Crates.io License: MIT


Installation

Install Script (macOS/Linux/Windows)

curl -fsSL gitshipit.net/install | bash

Cargo

cargo install shipit --locked

Homebrew (macOS)

brew tap trollefson/shipit && brew install shipit

From Source

git clone https://github.com/trollefson/shipit
cd shipit
cargo build --release --locked

Or grab a pre-built binary from the releases page.


Quick start

# 1. Generate a config file at the platform default location
shipit config generate

# 2. Check the config out and edit settings with your editor
shipit config show

# 3. Ship it from the root of your project. See the command docs below for more options
shipit b2b develop main --dryrun

Optional Requirements

  • A GitHub or GitLab account and api token (GitHub / GitLab) with merge request permissions is required for merge request creation with the --dry-run option disabled
  • Ollama running locally with the model that matches your config is required for usage with the --ai option enabled

Commands

b2b — Branch to Branch

shipit b2b <source> <target> [--ai] [--dryrun] [--dir <path>] [--id <identifier>] [--platform <github|gitlab>] [--remote <name>] [--prompt <text>]
Argument / Flag Description
source Branch with new commits (e.g. develop)
target Destination branch (e.g. main)
--ai Enable Ollama LLM to generate categorized release notes
--dryrun Preview the merge request description without creating it
--dir <path> Path to the git repository (defaults to current directory)
--id <identifier> Project identifier — owner/repo for GitHub, numeric ID for GitLab (auto-detected from remote URL if omitted)
--platform <github|gitlab> Force a specific platform (overrides auto-detection from the remote URL)
--remote <name> Git remote to detect platform from (defaults to origin)
--prompt <text> Prompt prefix sent to Ollama when --ai is set (overrides the ollama.prompt config value)

What happens:

  1. Finds all commits on source that aren't on target
  2. If --ai is set, sends the commit log to a local LLM running with Ollama and generates categorized release notes (features, fixes, infra, docs)
  3. If the local source branch is ahead of the remote, prompts you to push it before continuing
  4. Opens a pull/merge request on GitHub or GitLab with the description

Examples:

# Auto-detect platform and project from the origin remote URL
shipit b2b develop main

# With llm generated release notes
shipit b2b develop main --ai

# Preview the description without creating the request
shipit b2b develop main --ai --dryrun

# Explicitly specify the project identifier
shipit b2b develop main --id owner/repo
shipit b2b develop main --id 12345678

# Override the detected platform
shipit b2b develop main --platform github
shipit b2b develop main --platform gitlab

# Use a different remote
shipit b2b develop main --remote upstream

# Point at a repo outside the current directory
shipit b2b develop main --dir /path/to/repo

config generate

Writes or overwrites a default config file to the platform config directory and prints the path.

Default config location:

  • Linux & macOS: ~/.config/shipit/default-config.toml
  • Windows: %APPDATA%\shipit\default-config.toml
shipit config generate

config show

Prints the current config file path and its contents as TOML.

shipit config show

Platform support

Platform Architecture Status
Linux x86_64
macOS x86_64
macOS aarch64
Windows x86_64


Support

If shipit saves you time, a coffee goes a long way.

Buy Me A Coffee


License

MIT