198 lines
4.3 KiB
Markdown
198 lines
4.3 KiB
Markdown
# Git Commit Message Generator CLI
|
|
|
|
A CLI tool that generates git commit messages and conventional changelogs from staged/unstaged diffs using local LLMs (Ollama, llama.cpp). Features privacy-first operation with no external API calls, supports conventional commits format, includes interactive mode for message refinement, auto-detects change types, and can generate CHANGELOG.md from git history.
|
|
|
|
## Features
|
|
|
|
- **Privacy-First**: All processing happens locally using Ollama - no external API calls
|
|
- **Conventional Commits**: Generates messages following the conventional commits format
|
|
- **Interactive Mode**: Refine and edit messages before committing
|
|
- **Auto-Detection**: Automatically detects change types (feat, fix, docs, etc.)
|
|
- **Scope Detection**: Identifies affected areas from file paths
|
|
- **Changelog Generation**: Creates CHANGELOG.md from git history
|
|
- **Flexible Configuration**: Supports environment variables and config files
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install git-commit-message-generator
|
|
```
|
|
|
|
Or from source:
|
|
|
|
```bash
|
|
pip install -e .
|
|
```
|
|
|
|
## Prerequisites
|
|
|
|
- Python 3.9+
|
|
- [Ollama](https://ollama.ai/) running locally
|
|
- A supported model (llama3, codellama, etc.)
|
|
|
|
Install Ollama and pull a model:
|
|
|
|
```bash
|
|
# Install Ollama from https://ollama.ai
|
|
ollama serve
|
|
ollama pull llama3
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Generate Commit Message
|
|
|
|
Generate a commit message from staged changes:
|
|
|
|
```bash
|
|
git-commit-gen generate
|
|
```
|
|
|
|
Generate from unstaged changes:
|
|
|
|
```bash
|
|
git-commit-gen generate --unstaged
|
|
```
|
|
|
|
Use interactive mode for message refinement:
|
|
|
|
```bash
|
|
git-commit-gen generate --interactive
|
|
```
|
|
|
|
Specify a different model:
|
|
|
|
```bash
|
|
git-commit-gen generate --model codellama
|
|
```
|
|
|
|
Write message to file:
|
|
|
|
```bash
|
|
git-commit-gen generate -o commit-message.txt
|
|
```
|
|
|
|
### Generate Changelog
|
|
|
|
Generate a changelog from git history:
|
|
|
|
```bash
|
|
git-commit-gen changelog
|
|
```
|
|
|
|
Generate with a limit on commits:
|
|
|
|
```bash
|
|
git-commit-gen changelog --limit 100
|
|
```
|
|
|
|
Generate simple changelog (without LLM):
|
|
|
|
```bash
|
|
git-commit-gen changelog --simple
|
|
```
|
|
|
|
Write to file:
|
|
|
|
```bash
|
|
git-commit-gen changelog -o CHANGELOG.md
|
|
```
|
|
|
|
### Check Status
|
|
|
|
Check system status and configuration:
|
|
|
|
```bash
|
|
git-commit-gen status
|
|
```
|
|
|
|
### Configure Settings
|
|
|
|
Show current configuration:
|
|
|
|
```bash
|
|
git-commit-gen config --show
|
|
```
|
|
|
|
Set default model:
|
|
|
|
```bash
|
|
git-commit-gen config --model llama3
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Environment Variables
|
|
|
|
| Variable | Description | Default |
|
|
|----------|-------------|---------|
|
|
| `OLLAMA_HOST` | Ollama server URL | `http://localhost:11434` |
|
|
| `OLLAMA_MODEL` | Default model to use | `llama3` |
|
|
| `GIT_COMMIT_GENERATOR_CONFIG` | Path to config file | - |
|
|
|
|
### Config File
|
|
|
|
Create a `config.yaml` file:
|
|
|
|
```yaml
|
|
ollama_host: http://localhost:11434
|
|
ollama_model: llama3
|
|
```
|
|
|
|
## Prompt Templates
|
|
|
|
Customize generation prompts by creating files in the prompts directory:
|
|
|
|
- `prompts/commit_message.txt` - Template for commit message generation
|
|
- `prompts/changelog.txt` - Template for changelog generation
|
|
|
|
## Error Handling
|
|
|
|
| Error | Solution |
|
|
|-------|----------|
|
|
| Ollama connection failed | Check if Ollama is running, verify host URL |
|
|
| No staged changes | Stage with `git add` or use `--unstaged` |
|
|
| Invalid format | Regenerate or manually edit |
|
|
| Git repo not found | Run from within a git repository |
|
|
| Model not found | Pull with `ollama pull <model_name>` |
|
|
|
|
## Development
|
|
|
|
### Running Tests
|
|
|
|
```bash
|
|
pytest tests/ -v --cov=src --cov-report=term-missing
|
|
```
|
|
|
|
### Project Structure
|
|
|
|
```
|
|
git-commit-message-generator/
|
|
├── src/git_commit_generator/
|
|
│ ├── __init__.py
|
|
│ ├── __main__.py # Entry point
|
|
│ ├── cli.py # CLI interface
|
|
│ ├── config.py # Configuration management
|
|
│ ├── git_utils.py # Git operations
|
|
│ ├── ollama_client.py # Ollama integration
|
|
│ ├── message_generator.py # Commit message generation
|
|
│ ├── changelog_generator.py # Changelog generation
|
|
│ └── interactive.py # Interactive mode
|
|
├── prompts/
|
|
│ ├── commit_message.txt
|
|
│ └── changelog.txt
|
|
├── tests/
|
|
│ ├── test_cli.py
|
|
│ ├── test_git_utils.py
|
|
│ ├── test_message_generator.py
|
|
│ ├── test_changelog_generator.py
|
|
│ └── conftest.py
|
|
├── pyproject.toml
|
|
├── requirements.txt
|
|
└── README.md
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|