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
# 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
- Scans parent directory for git repositories
- Checks each repository for uncommitted changes (staged or unstaged)
- 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
- 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
Languages
Clojure
100%