2026-01-05 02:42:15 -05:00
2026-01-05 02:13:30 -05:00
2026-01-05 02:23:21 -05:00
2026-01-05 02:43:46 -05:00
2026-01-05 02:47:23 -05:00

commitly

A CLI tool for making commits to many subrepos after a distributed change.

Overview

commitly is a Babashka/Clojure CLI tool designed for monorepo workflows where multiple independent git repositories coexist. When you make changes that span multiple subrepos (e.g., updating documentation, shared configuration, or architecture changes), commitly automates the process of committing those changes across all affected repositories.

Features

  • Automatically detects which subrepos have uncommitted changes
  • Creates commits with a single message across all modified subrepos
  • Push changes to remote repositories after committing
  • View status of all modified repositories
  • Reports commit status for each subrepo
  • Written in Babashka for fast startup and easy distribution

Usage

# Show status of all modified subrepos
./commitly status

# Commit changes across all modified subrepos
./commitly "Your commit message here"

# Commit and push changes
./commitly -p "Your commit message here"

# Push only (without committing)
./commitly -p

Requirements

  • Babashka installed and available on PATH

Installation

Install directly from Gitea using SSH:

# Install from your Gitea repository via SSH
bbin install git@git.ajet.fyi:ajet-industries/commitly.git

# Install a specific version using a git tag
bbin install git@git.ajet.fyi:ajet-industries/commitly.git --git/tag v1.0.0

# Install the latest commit
bbin install git@git.ajet.fyi:ajet-industries/commitly.git --latest-sha

This will install commitly to ~/.local/bin/commitly (make sure ~/.local/bin is in your PATH).

Note: Requires bbin to be installed first:

bash < <(curl -s https://raw.githubusercontent.com/babashka/bbin/main/bbin)

Manual Installation

# Make the script executable
chmod +x commitly

# Optionally, symlink to a directory in your PATH
ln -s $(pwd)/commitly /usr/local/bin/commitly

How It Works

  1. Scans parent directory for git repositories
  2. Checks each repository for uncommitted changes (staged or unstaged)
  3. Depending on the command:
    • status: Shows git status for all modified repositories
    • <message>: Commits changes in each modified repository with the provided message
    • -p <message>: Commits and pushes changes to remote
    • -p (no message): Pushes all repositories without committing
  4. Reports success/failure for each repository

Use Case

Perfect for monorepos containing multiple independent services (each with their own .git directory) where cross-cutting changes need to be committed atomically with consistent commit messages.

Description
No description provided
Readme 62 KiB
Languages
Clojure 100%