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 enhanced-git

# or using pip
pip install enhanced-git

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.2.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.2-py3-none-any.whl (22.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: enhanced_git-1.0.2.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.2.tar.gz
Algorithm Hash digest
SHA256 6813b4d1fcec1ac781c89f19af216d7e6d1b18be68433c0f884a23f9a8020a7d
MD5 62811ef879128b6a60d01358d9b76f49
BLAKE2b-256 36820c3d428487d2dd41723c87b5c931f6476c0aca38be42e7f6336b3e73f529

See more details on using hashes here.

File details

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

File metadata

  • Download URL: enhanced_git-1.0.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c4f748beb204fd15d5421eaf84d4eaa02b07119f769f55a750dcbcb03de29ea8
MD5 23b6be92f9c9ac386c84b2f83d71e22f
BLAKE2b-256 8bd282f41dde3ab91fe663d06dc865d0931a73c3c0d0e120486a0953739d4e1f

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