Git Integration
bumpx provides seamless integration with Git workflows, automating commits, tags, and pushes as part of your version bumping process.
Automatic Git Operations
Basic Git Workflow
Automate your entire release workflow:
# Create commit for version bump
bumpx patch --commit
# Create commit and tag
bumpx minor --commit --tag
# Full workflow: commit, tag, and push
bumpx major --commit --tag --push
Git Status Checking
bumpx checks your working directory state before making changes:
# Requires clean working directory
bumpx patch --commit
# Skip git status check (allows dirty working directory)
bumpx patch --commit --no-git-check
# Check what files are staged/modified
git status
Commit Management
Automatic Commits
Create descriptive commits automatically:
# Default commit message: "chore: bump version to 1.2.3"
bumpx patch --commit
# Custom commit message
bumpx minor --commit --message "release: v%s"
# Include additional context
bumpx patch --commit --message "fix: patch release %s - security updates"
Commit Message Templates
Use placeholders in your commit messages:
# %s is replaced with the new version
bumpx patch --commit --message "chore: release v%s"
# Custom format options
bumpx minor --commit --message "🚀 Release %s"
bumpx major --commit --message "BREAKING: Version %s released"
Signed Commits
Sign your releases with GPG:
# Create signed commit
bumpx patch --commit --sign
# Sign both commit and tag
bumpx minor --commit --tag --sign
Setup GPG signing:
# Configure Git to use your signing key
git config --global user.signingkey YOUR_KEY_ID
git config --global commit.gpgsign true
# Verify GPG setup
gpg --list-secret-keys --keyid-format LONG
Tag Management
Automatic Tagging
Create version tags automatically:
# Create lightweight tag
bumpx patch --tag
# Create annotated tag with message
bumpx minor --tag --tag-message "Release v%s"
# Signed tags for security
bumpx major --tag --sign
Tag Naming Conventions
Customize tag formats:
# Default: "v1.2.3"
bumpx patch --tag
# Custom format: "release-1.2.3"
bumpx patch --tag --tag-message "release-%s"
# Semantic format: "v1.2.3 - Bug fixes"
bumpx patch --tag --tag-message "v%s - Bug fixes and improvements"
Tag Management
List and manage existing tags:
# List all tags
git tag -l
# List tags matching pattern
git tag -l "v1.*"
# Delete tag (if needed)
git tag -d v1.2.3
git push origin :refs/tags/v1.2.3
Remote Repository Integration
Push Operations
Automatically push changes to remote:
# Push commits and tags
bumpx patch --commit --tag --push
# Push to specific remote
git remote add origin https://github.com/user/repo.git
bumpx patch --commit --tag --push
Branch Management
Handle different branch scenarios:
# Check current branch
git branch --show-current
# Ensure you're on the right branch
git checkout main
bumpx patch --commit --tag --push
# Release from feature branch
git checkout feature/release-prep
bumpx patch --commit --tag
git checkout main
git merge feature/release-prep
git push origin main --tags
Git Hooks Integration
Pre-commit Hooks
Validate versions before committing:
#!/bin/sh
# .git/hooks/pre-commit
echo "Validating version consistency..."
bumpx --dry-run --verbose
if [ $? -ne 0 ]; then
echo "Version validation failed!"
exit 1
fi
Post-commit Hooks
Automate post-release tasks:
#!/bin/sh
# .git/hooks/post-commit
# Check if this was a version bump commit
if git log -1 --pretty=%B | grep -q "bump version to"; then
echo "Version bump detected, running build..."
npm run build
fi
Skip Git Hooks
Bypass hooks when needed:
# Skip all git hooks
bumpx patch --commit --no-verify
# Useful for CI/CD environments
bumpx patch --commit --tag --push --no-verify
Advanced Git Features
Multiple Remotes
Handle projects with multiple remotes:
# List remotes
git remote -v
# Push to specific remote
git push upstream main --tags
# Configure default push behavior
git config push.default current
Conflict Resolution
Handle merge conflicts during automated releases:
# If conflicts occur during automated push
git status
git add .
git commit --no-edit
git push origin main --tags
Rebase Integration
Use with rebase workflows:
# Interactive rebase before release
git rebase -i HEAD~5
bumpx patch --commit --tag
# Squash commits then bump version
git rebase -i --autosquash HEAD~3
bumpx minor --commit --tag --push
CI/CD Integration
GitHub Actions
Automate releases in GitHub Actions:
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Bump version and push
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
bumpx patch --commit --tag --push
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GitLab CI
Integration with GitLab pipelines:
release:
stage: release
script:
- git config user.name "GitLab CI"
- git config user.email "ci@gitlab.com"
- bumpx patch --commit --tag --push
only:
- main
Authentication
Setup authentication for automated releases:
# GitHub (use personal access token)
git remote set-url origin https://token:$GITHUB_TOKEN@github.com/user/repo.git
# GitLab (use deploy token)
git remote set-url origin https://gitlab-ci-token:$CI_JOB_TOKEN@gitlab.com/user/repo.git
# SSH keys (recommended for security)
ssh-keygen -t ed25519 -C "ci@example.com"
# Add public key to GitHub/GitLab
Git Configuration
Repository Setup
Essential Git configuration for bumpx:
# User configuration
git config user.name "Your Name"
git config user.email "your.email@example.com"
# Default branch
git config init.defaultBranch main
# Push configuration
git config push.default simple
git config push.followTags true
Global Aliases
Create helpful Git aliases:
# Add to ~/.gitconfig
[alias]
release-patch = "!f() { bumpx patch --commit --tag --push; }; f"
release-minor = "!f() { bumpx minor --commit --tag --push; }; f"
release-major = "!f() { bumpx major --prompt --commits --commit --tag --push; }; f"
# Usage
git release-patch
git release-minor
Repository-Specific Config
Project-specific Git settings:
# In your project directory
git config user.email "project-specific@email.com"
git config commit.template .gitmessage
git config merge.tool vimdiff
Best Practices
Release Workflow
Recommended release process:
# 1. Ensure clean state
git status
git pull origin main
# 2. Run tests
npm test
# 3. Version bump with context
bumpx patch --commits --commit --tag
# 4. Push release
git push origin main --tags
# 5. Create GitHub release (optional)
gh release create v1.2.3 --generate-notes
Branch Strategy
Align with your branching model:
Git Flow:
# Development on develop branch
git checkout develop
bumpx prerelease --preid dev --commit
# Release preparation
git checkout -b release/1.2.0
bumpx minor --commit
# Final release on main
git checkout main
git merge release/1.2.0
git tag v1.2.0
git push origin main --tags
GitHub Flow:
# Feature development
git checkout -b feature/new-feature
# Ready for release
git checkout main
git merge feature/new-feature
bumpx patch --commit --tag --push
Security Considerations
Secure your release process:
# Use signed commits for releases
bumpx patch --commit --tag --sign
# Verify signatures
git log --show-signature
# Use SSH for Git operations
git remote set-url origin git@github.com:user/repo.git
# Protect main branch
# (Configure branch protection in GitHub/GitLab)
Troubleshooting
Common Git Issues
Authentication failures:
# Check remote URL
git remote get-url origin
# Test authentication
git ls-remote origin
# Update token/credentials
git config credential.helper store
Dirty working directory:
# See what's changed
git status
git diff
# Stash changes temporarily
git stash
bumpx patch --commit --tag
git stash pop
Merge conflicts:
# Resolve conflicts
git status
# Edit conflicted files
git add .
git commit --no-edit
# Continue with version bump
bumpx patch --commit --tag --push
Tag conflicts:
# Delete existing tag
git tag -d v1.2.3
git push origin :refs/tags/v1.2.3
# Create new tag
bumpx patch --tag
Debug Git Operations
Get detailed information about Git operations:
# Verbose Git operations
export GIT_TRACE=1
bumpx patch --commit --tag --verbose
# Check Git configuration
git config --list
git config --show-origin --list
# Verify repository state
git log --oneline -5
git tag -l
git remote -v