Skip to main content

Generate Conventional Commit messages and changelog sections using AI

Project description

Git-AI

License: MIT Python 3.11+

Generate Conventional Commit messages and changelog sections using AI. Simple to install, works with Use Local models with Ollama or OpenAI, gracefully degrades when no AI is available.

Features

  • AI-Powered: Generate commit messages using OpenAI or local Ollama models
  • Conventional Commits: Follows strict Conventional Commit formatting rules
  • Changelog Generation: Create Keep a Changelog formatted sections
  • Git Hook Integration: Automatic commit message generation on git commit
  • Fallback Mode: Works without AI using intelligent heuristics
  • Cross-Platform: Linux, macOS support
  • Zero Dependencies: Single Python package, minimal runtime deps

Quick Start (60 seconds)

Install

# using pipx (recommended)
pipx install git-ai

# or using pip
pip install git-ai

Setup (Optional AI Integration)

With OpenAI:

export OPENAI_API_KEY="your-api-key-here"

With Ollama (Local AI):

# install Ollama and pull a model
ollama pull qwen2.5-coder:3b

# set environment variables
export OLLAMA_BASE_URL="http://localhost:11434"
export OLLAMA_MODEL="qwen2.5-coder:3b"

Basic Usage

# stage some changes
git add .

# Install Git hook for automatic generation
git-ai hook install

#if using git-ai hook, then just do git commit -m "some sample message"
#if not using git-ai hook use this:
git commit -m "$(git-ai commit)"


# generate changelog
git-ai changelog --since v1.0.0 --version v1.1.0

Usage

Commands

git-ai commit

Generate a commit message from staged changes.

# Basic usage
git-ai commit

# Preview without committing
git-ai commit --dry-run

# Subject line only
git-ai commit --no-body

# Force plain style (no conventional format)
git-ai commit --style plain

# Used by Git hook
git-ai commit --hook /path/to/.git/COMMIT_EDITMSG

git-ai hook install

Install Git hook for automatic commit message generation.

# Install hook
git-ai hook install

# Force overwrite existing hook
git-ai hook install --force

# Remove hook
git-ai hook uninstall

git-ai changelog

Generate changelog section from commit history.

# generate changelog from commits since v1.0.0
git-ai changelog --since v1.0.0

# with version header
git-ai changelog --since v1.0.0 --version v1.1.0

# custom output file
git-ai changelog --since v1.0.0 --output HISTORY.md

# different end reference
git-ai changelog --since v1.0.0 --to main

Environment Variables

  • OPENAI_API_KEY: Your OpenAI API key
  • OLLAMA_BASE_URL: Ollama server URL (default: http://localhost:11434)
  • OLLAMA_MODEL: Ollama model name (default: qwen2.5-coder:3b)

How It Works

Commit Message Generation

  1. Diff Analysis: Parses git diff --staged to understand changes
  2. Type Inference: Detects commit type from file paths and content:
    • tests/test
    • docs/docs
    • fix/bug in content → fix
    • New files → feat
  3. AI Enhancement: Uses LLM to polish the message while preserving accuracy
  4. Formatting: Ensures Conventional Commit compliance:
    • Subject < 70 chars
    • type(scope): description format
    • Proper body wrapping at 72 columns

Changelog Generation

  1. Commit Parsing: Extracts commits between references
  2. Grouping: Groups by Conventional Commit types
  3. AI Polish: Improves clarity while preserving facts
  4. Insertion: Adds new section to top of CHANGELOG.md

Fallback Mode

When no AI is configured, GitAI uses intelligent heuristics:

  • Path-based type detection
  • Content analysis for keywords
  • Statistical analysis of changes
  • Scope inference from directory structure

Development

Setup

# clone repository
git clone https://github.com/yourusername/git-ai.git
cd gitai

# install with dev dependencies
pip install -e ".[dev]"

# run tests
pytest

# run linting
ruff check .
mypy gitai

Project Structure

gitai/
├── cli.py              # Main CLI entry point
├── commit.py           # Commit message generation
├── changelog.py        # Changelog generation
├── config.py           # Configuration management
├── constants.py        # Prompts and constants
├── diff.py             # Git diff parsing and chunking
├── hook.py             # Git hook management
├── providers/          # LLM providers
│   ├── base.py
│   ├── openai_provider.py
│   └── ollama_provider.py
├── util.py             # Utility functions
└── __init__.py

tests/                  # Test suite
├── test_commit.py
├── test_changelog.py
├── test_diff.py
└── test_hook_integration.py

Contributing

I welcome contributions! Be kind

Development Requirements

  • Python 3.11+
  • Poetry for dependency management
  • Pre-commit for code quality

Testing

# run test suite
pytest

# with coverage
pytest --cov=gitai --cov-report=html

# run specific tests
pytest tests/test_commit.py -v

License

MIT License - see LICENSE file for details.

Privacy & Security

  • No Code Storage: Your code never leaves your machine
  • Local AI Option: Use Ollama for complete local processing
  • API Usage: Only sends commit diffs and prompts to configured LLM
  • Graceful Degradation: Works without any network access

Troubleshooting

No staged changes

Error: No staged changes found. Did you forget to run 'git add'?

Solution: Stage your changes with git add before running git-ai commit

Missing API key

Warning: OPENAI_API_KEY environment variable is required

Solution: Set your API key or use Ollama for local AI

Hook conflicts

Warning: Existing commit-msg hook found

Solution: Use git-ai hook install --force to overwrite, or manually merge

Network timeouts

Error: Ollama API error: Connection timeout

Solution: Check Ollama is running: ollama serve

Large diffs

GitAI automatically chunks large diffs to stay within LLM token limits

Examples

Example Commit Messages

AI-Generated:

feat(auth): add user registration and login system

- Implement user registration with email validation
- Add login endpoint with JWT token generation
- Create password hashing utilities
- Add input validation and error handling

Fallback Mode:

feat(src): add user authentication module

- add src/auth.py (45 additions)
- update src/models.py (12 additions, 3 deletions)

Example Changelog

## [v1.1.0] - 2024-01-15

### Features
- **auth**: Add user registration and login system (#123)
- **api**: Implement RESTful user management endpoints

### Fixes
- **core**: Fix null pointer exception in user validation (#456)
- **db**: Resolve connection timeout issues

### Documentation
- Update API documentation with authentication examples
- Add installation instructions for local development

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

enhanced_git-1.0.0.tar.gz (23.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

enhanced_git-1.0.0-py3-none-any.whl (22.8 kB view details)

Uploaded Python 3

File details

Details for the file enhanced_git-1.0.0.tar.gz.

File metadata

  • Download URL: enhanced_git-1.0.0.tar.gz
  • Upload date:
  • Size: 23.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for enhanced_git-1.0.0.tar.gz
Algorithm Hash digest
SHA256 20ee9876ecb06f991b3418f6a3e98cb0a9feb71a793a453ece194d0489e3a9af
MD5 04a879e88f1037c3a37904d14c12e14d
BLAKE2b-256 9a135193b539c3baf1f6042bf1f005141e7b4803037a7bfd411d8310a9523d9b

See more details on using hashes here.

File details

Details for the file enhanced_git-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: enhanced_git-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 22.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for enhanced_git-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2db1d6e90bd00b17d693bfc066db74483417bd91c961b5e6519e754dfb0bd4ee
MD5 f176ebec9db9871f6c82c0ec43a7dd32
BLAKE2b-256 2ac45137ab575a8a2a80a6f2bd732ffef5aecd8a58bb99465b4442282321f48d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page