tools/README.md
mgit.py is an intelligent Git workflow tool designed to streamline commit and PR processes for Milvus development.
Install GitHub CLI
# macOS
brew install gh
# Linux
# See: https://cli.github.com/
Authenticate GitHub CLI
gh auth login
Configure AI API Key (Optional - choose one or none)
# Gemini API (recommended)
export GEMINI_API_KEY=AIzaSy...
# Claude API
export ANTHROPIC_API_KEY=sk-ant-...
# OpenAI API
export OPENAI_API_KEY=sk-...
Add to ~/.bashrc or ~/.zshrc for persistence:
echo 'export GEMINI_API_KEY=your-key-here' >> ~/.zshrc
Note: If you have local claude CLI installed, the tool will use it instead of API calls.
python3 tools/mgit.py --commit
Workflow:
y Accept and commite Edit in $EDITORr Regenerate with AIm Manual inputn CancelExample Output:
Generated Commit Message:
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
enhance: optimize planparserv2 grammar and use SLL prediction
1. Reordered 'expr' alternatives to prioritize common patterns
2. Implemented SLL-first parsing for better performance
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Options:
[y] Accept and commit
[e] Edit in $EDITOR
[r] Regenerate with AI
[m] Enter manually
[n] Cancel
python3 tools/mgit.py --pr
Workflow:
milvus-io/milvus with required issue referenceImportant: All Milvus PRs must include an issue reference in the format:
issue: #39157
For cherry-pick PRs, include the original PR number:
issue: #39157
pr: #39200
python3 tools/mgit.py --all
# or simply
python3 tools/mgit.py
Automatically executes: create commit ā create PR.
Create a shell alias for convenience:
# Add to ~/.bashrc or ~/.zshrc
# Option 1: Dynamic path (works from any directory within the repo)
alias mgit='python3 "$(git rev-parse --show-toplevel)/tools/mgit.py"'
# Option 2: Fixed path (replace with your actual Milvus repo location)
# alias mgit='python3 /path/to/your/milvus/tools/mgit.py'
After reloading, use directly:
mgit --commit
mgit --pr
mgit # complete workflow
Follows Milvus conventions:
Format: <type>: <summary>
Types:
fix: Bug fixesenhance: Improvements to existing featuresfeat: New featuresrefactor: Code refactoringtest: Add or modify testsdocs: Documentation updateschore: Build/tool changesRequirements:
Examples:
fix: Fix missing handling of FlushAllMsg in recovery storage
enhance: optimize jieba and lindera analyzer clone
feat: Add semantic highlight
test: Add planparserv2 benchmarks
When creating a new branch from master, the tool generates names in the format:
{type}/{description}-{timestamp}
Examples:
fix/memory-leak-1234feat/add-gemini-api-5678enhance/optimize-parser-9012Before committing, the tool offers to run Milvus format tools:
make fmt # Format Go code
make static-check # Run linters (optional)
You can choose to:
After committing, you can optionally run a local code review using Claude Code (if installed):
claude -p "Review the recent changes for potential issues"
Q: What if AI API call fails? A: The script auto-falls back to manual input mode.
Q: How to modify generated commit message?
A: Choose e to open in $EDITOR, or m for manual input.
Q: Multiple commits on branch? A: Milvus typically requires a single squashed commit. Tool will warn and suggest:
git rebase -i origin/master
Q: Can I use without API keys? A: Yes, but AI generation won't be available. You'll enter messages manually.
Q: How to test without actually committing?
A: Choose n at the confirmation step.
Q: What if I'm on master branch? A: The tool will prompt you to create a new feature branch automatically.
Stage specific files only:
python3 tools/mgit.py --commit
# Select 's' at file selection, then enter: 0,2,5
Use custom editor:
export EDITOR=vim # or nano, emacs, etc.
python3 tools/mgit.py --commit
# Choose 'e' to edit
Cherry-pick to multiple branches:
python3 tools/mgit.py --pr
# At cherry-pick step, enter: 0,1,2
Use local Claude Code instead of API:
# If 'claude' command is available, tool will use it automatically
# No API key needed
GitHub CLI not authenticated:
ā GitHub CLI not authenticated. Run: gh auth login
Solution: Run gh auth login and follow prompts
Git user info not configured:
ā Git user name/email not configured
Solution:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
API rate limit: Wait and retry, or switch to another AI provider (Gemini ā Claude ā OpenAI)
Format tools not found: Ensure you're in the Milvus repository root, or skip formatting step
claude CLI available) - no API neededGEMINI_API_KEY set)ANTHROPIC_API_KEY set)OPENAI_API_KEY set)For improvements to mgit.py, refer to the design document: docs/plans/2026-01-10-mgit-design.md