v0.1.5
♻️ refactor(generator):移除未使用的导入和剪贴板功能 ♻️ refactor(git):清理未使用的导入和优化代码结构 ♻️ refactor(i18n):简化翻译模块的导出结构 ♻️ refactor(llm):移除未使用的序列化导入 ♻️ refactor(openrouter):简化模型验证函数
QuiCommit
English | 中文文档
A powerful AI-powered Git assistant for generating conventional commits, tags, and changelogs. Manage multiple Git profiles for different work contexts.
[Still in early development, some features may not be complete. Feedback and contributions are welcome.]
Features
- AI-Powered Generation: Generate commits, tags, and changelogs using LLM APIs (Ollama, OpenAI, Anthropic, Kimi, DeepSeek, OpenRouter) or local models
- Conventional Commits: Full support for Conventional Commits and commitlint formats
- Profile Management: Manage multiple Git identities with SSH keys and GPG signing support
- Smart Tagging: Semantic version bumping with AI-generated release notes
- Changelog Generation: Automatic changelog generation in Keep a Changelog format
- Security: Encrypt sensitive data
- Interactive UI: Beautiful CLI with previews and confirmations
Installation
Cargo Install
The cargo-installed version may temporarily lag behind the source code progress.
cargo install quicommit
Install from Source
git clone https://git.lyz.one/SidneyZhang/QuiCommit.git
cd QuiCommit
cargo build --release
cargo install --path .
Requirements: Rust 1.70+, Git 2.0+
Quick Start
Initialize
quicommit init
Generate Commit
# AI-generated commit (default)
quicommit commit
# Manual commit
quicommit commit --manual -t feat -m "add new feature"
# Stage all and commit
quicommit commit -a
# Skip confirmation
quicommit commit --yes
# Use date-based commit message
quicommit commit --date
# Push after committing
quicommit commit --push
Create Tag
# Auto-detect version bump
quicommit tag
# Specify bump type
quicommit tag --bump minor
# Custom tag name
quicommit tag -n v1.0.0
# AI-generate tag message
quicommit tag --generate
# Create tag and push to remote
quicommit tag --push
Generate Changelog
# Generate for unreleased changes
quicommit changelog
# Generate for specific version
quicommit changelog -v 1.0.0
# AI-generate changelog
quicommit changelog --generate
# Initialize new changelog file
quicommit changelog --init
# Specify output file
quicommit changelog -o RELEASE_NOTES.md
Manage Profiles
# Add new profile
quicommit profile add
# List profiles
quicommit profile list
# Show profile details
quicommit profile show
# Switch profile
quicommit profile switch
# Set default profile
quicommit profile set-default personal
# Set profile for current repo
quicommit profile set-repo personal
# Apply profile to current repo
quicommit profile apply
# Apply profile globally
quicommit profile apply --global
# Copy profile
quicommit profile copy personal work
# Edit profile
quicommit profile edit personal
# Remove profile
quicommit profile remove old-profile
# Check profile
quicommit profile check
# View usage statistics
quicommit profile stats
# Manage profile tokens
quicommit profile token
Configure LLM
# Configure Ollama (local)
quicommit config set-llm ollama
quicommit config set-ollama --url http://localhost:11434 --model llama2
# Configure OpenAI
quicommit config set-llm openai
quicommit config set-openai-key YOUR_API_KEY
# Configure Anthropic Claude
quicommit config set-llm anthropic
quicommit config set-anthropic-key YOUR_API_KEY
# Configure Kimi (Moonshot AI)
quicommit config set-llm kimi
quicommit config set-kimi-key YOUR_API_KEY
quicommit config set-kimi --base-url https://api.moonshot.cn/v1 --model moonshot-v1-8k
# Configure DeepSeek
quicommit config set-llm deepseek
quicommit config set-deepseek-key YOUR_API_KEY
quicommit config set-deepseek --base-url https://api.deepseek.com/v1 --model deepseek-chat
# Configure OpenRouter
quicommit config set-llm openrouter
quicommit config set-openrouter-key YOUR_API_KEY
quicommit config set-openrouter --base-url https://openrouter.ai/api/v1 --model openai/gpt-4
# Set commit format
quicommit config set-commit-format conventional
# Set version prefix
quicommit config set-version-prefix v
# Set changelog path
quicommit config set-changelog-path CHANGELOG.md
# Set output language
quicommit config set-language en
# Set keep commit types in English
quicommit config set-keep-types-english true
# Set keep changelog types in English
quicommit config set-keep-changelog-types-english true
# Test LLM connection
quicommit config test-llm
# Reset configuration to defaults
quicommit config reset
Command Reference
| Command | Alias | Description |
|---|---|---|
quicommit init |
i |
Initialize configuration |
quicommit commit |
c |
Generate and create commit |
quicommit tag |
t |
Generate and create tag |
quicommit changelog |
cl |
Generate changelog |
quicommit profile |
p |
Manage Git profiles |
quicommit config |
cfg |
Manage settings |
Commit Options
| Option | Description |
|---|---|
--commit-type |
Commit type (feat, fix, etc.) |
-s, --scope |
Commit scope |
-m, --message |
Commit description |
--body |
Commit body |
-b, --breaking |
Mark as breaking change |
-d, --date |
Use date-based commit message |
--manual |
Manual input, skip AI |
-a, --all |
Stage all changes |
-S, --sign |
GPG sign commit |
--amend |
Amend previous commit |
--dry-run |
Show without committing |
--conventional |
Use Conventional Commits format |
--commitlint |
Use commitlint format |
--no-verify |
Skip commit message verification |
-y, --yes |
Skip confirmation |
--push |
Push after committing |
--remote |
Specify remote repository (default: origin) |
Tag Options
| Option | Description |
|---|---|
-n, --name |
Tag name |
-b, --bump |
Version bump (major/minor/patch) |
-m, --message |
Tag message |
-g, --generate |
AI-generate message |
-S, --sign |
GPG sign tag |
-l, --lightweight |
Create lightweight tag |
-f, --force |
Force overwrite existing tag |
-p, --push |
Push to remote |
-r, --remote |
Specify remote repository (default: origin) |
--dry-run |
Dry run |
-y, --yes |
Skip confirmation |
Changelog Options
| Option | Description |
|---|---|
-o, --output |
Output file path |
-v, --version |
Generate for specific version |
-f, --from |
Generate from specific tag |
-t, --to |
Generate to specific ref (default: HEAD) |
-i, --init |
Initialize new changelog file |
-g, --generate |
AI-generate changelog |
--prepend |
Prepend to existing changelog |
--include-hashes |
Include commit hashes |
--include-authors |
Include authors |
--format |
Format (keep-a-changelog, github-releases) |
--dry-run |
Dry run (output to stdout) |
-y, --yes |
Skip confirmation |
Configuration File
Location:
- Linux:
~/.config/quicommit/config.toml - macOS:
~/Library/Application Support/quicommit/config.toml - Windows:
%APPDATA%\quicommit\config.toml
version = "1"
default_profile = "personal"
[profiles.personal]
name = "personal"
user_name = "Your Name"
user_email = "your.email@example.com"
description = "Personal projects"
is_work = false
[profiles.work]
name = "work"
user_name = "Your Name"
user_email = "your.name@company.com"
description = "Work projects"
is_work = true
organization = "Your Company"
[profiles.work.ssh]
private_key_path = "/home/user/.ssh/id_rsa_work"
agent_forwarding = true
[profiles.work.gpg]
key_id = "YOUR_GPG_KEY_ID"
program = "gpg"
use_agent = true
[llm]
provider = "ollama"
max_tokens = 500
temperature = 0.7
timeout = 30
[llm.ollama]
url = "http://localhost:11434"
model = "llama2"
[llm.openai]
model = "gpt-4"
base_url = "https://api.openai.com/v1"
[llm.anthropic]
model = "claude-3-sonnet-20240229"
[llm.kimi]
model = "moonshot-v1-8k"
[llm.deepseek]
model = "deepseek-chat"
[llm.openrouter]
model = "openai/gpt-4"
[commit]
format = "conventional"
auto_generate = true
allow_empty = false
gpg_sign = false
max_subject_length = 100
require_scope = false
require_body = false
body_required_types = ["feat", "fix"]
[tag]
version_prefix = "v"
auto_generate = true
gpg_sign = false
include_changelog = true
[changelog]
path = "CHANGELOG.md"
auto_generate = true
format = "keep-a-changelog"
include_hashes = false
include_authors = false
group_by_type = true
[theme]
colors = true
icons = true
date_format = "%Y-%m-%d"
[repo_profiles]
"/path/to/work/project" = "work"
"/path/to/personal/project" = "personal"
Environment Variables
| Variable | Description |
|---|---|
QUICOMMIT_CONFIG |
Configuration file path |
EDITOR |
Default editor |
NO_COLOR |
Disable colored output |
Troubleshooting
# View current configuration
quicommit config list
# Show configuration details
quicommit config show
# Edit configuration file
quicommit config edit
# Set configuration value
quicommit config set llm.provider ollama
# Get configuration value
quicommit config get llm.provider
# Test LLM connection
quicommit config test-llm
# List available models
quicommit config list-models
# Export configuration
quicommit config export -o config-backup.toml
# Import configuration
quicommit config import -i config-backup.toml
# Reset configuration
quicommit config reset --force
Contributing
Contributions are welcome! Please follow these steps:
Submit a Pull Request
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit changes:
git commit -m 'feat: add new feature' - Push branch:
git push origin feature/your-feature - Open a Pull Request
Development Setup
# Clone repository
git clone https://git.lyz.one/SidneyZhang/QuiCommit.git
cd QuiCommit
# Fetch dependencies
cargo fetch
# Run in development mode
cargo run -- commit --help
# Run tests
cargo test
# Code quality checks
cargo clippy
cargo fmt --check
Code Standards
- Follow Rust formatting (run
cargo fmt) - Use Conventional Commits for commit messages
- Add tests for new features
- Ensure
cargo clippypasses with no warnings
Project Structure
src/
├── commands/ # CLI command implementations
│ ├── commit.rs
│ ├── tag.rs
│ ├── changelog.rs
│ ├── profile.rs
│ ├── config.rs
│ └── init.rs
├── config/ # Configuration management
│ ├── manager.rs
│ └── profile.rs
├── generator/ # AI content generation
├── git/ # Git operations
│ ├── commit.rs
│ ├── tag.rs
│ └── changelog.rs
├── llm/ # LLM provider implementations
│ ├── ollama.rs
│ ├── openai.rs
│ ├── anthropic.rs
│ ├── kimi.rs
│ ├── deepseek.rs
│ └── openrouter.rs
├── i18n/ # Internationalization support
│ ├── messages.rs
│ └── translator.rs
├── utils/ # Utility functions
│ ├── validators.rs
│ ├── formatter.rs
│ ├── crypto.rs
│ └── editor.rs
└── main.rs # Program entry point
License
MIT License
Acknowledgments
- Conventional Commits specification
- Keep a Changelog format
- Ollama for local LLM support
Languages
Rust
99.5%
Makefile
0.5%