gits - Git Workflow Automation¶
gits is a powerful bash script designed to streamline Git workflow automation. It combines common Git, GitHub CLI, and Gitea tea commands into quick, easy-to-use operations, supporting Forgejo, Gitea, and GitHub platforms.
Overview¶
GitS provides developers with a unified interface for common Git operations across multiple platforms. Whether you're working with GitHub, Gitea, or Forgejo, gits offers consistent commands and intelligent automation.
Manage 10+ repositories in seconds - From feature branches to merged PRs with just a few commands.
Key Features¶
- Multi-Platform Support - Works with Forgejo, Gitea, and GitHub
- Batch Operations - Perform actions across multiple repositories simultaneously
- PR Batch Management - Create and merge pull requests across all repositories with smart diff detection
- AI-Powered Commits - Integration with Pal for intelligent commit message generation
- Parallel Processing - Concurrent operations for better performance
- Smart Diff Detection - Only acts on repositories with actual changes
- Repository Management - Create, clone, and manage repositories
- Issue Management - Fetch and save issues from repositories
- Pull Request Workflow - Complete PR lifecycle management
Installation¶
Via UCLI (Recommended)¶
# Install ucli tool manager first
curl -fsSL https://install.ucli.tools | bash
# Install gits
ucli build gits
Manual Installation¶
Prerequisites¶
Required Tools¶
- git - Version control system
- jq - JSON processing (for Forgejo/Gitea API)
- curl - HTTP requests
- gh - GitHub CLI (for GitHub operations)
- tea - Gitea CLI (for Gitea operations)
Optional Tools¶
- pal - AI-powered commit message generation (Pal by Scott Yeager)
Platform-Specific Requirements¶
Ubuntu/Debian¶
macOS¶
Authentication Setup¶
GitHub¶
Gitea/Forgejo¶
Usage¶
Basic Git Operations¶
Quick Pull (Stash, Fetch, Pull, Status)¶
Combines:git stash, git fetch, git pull, git status
Rapid Push (Stage, Commit, Push)¶
Stages all changes, prompts for commit message, commits, and pushes.AI-Powered Workflow¶
Executes:git add . && pal /commit -y && git push (requires Pal)
Repository Management¶
Clone Repositories¶
# Clone single repository
gits clone <repo-url>
# Clone all repositories from user/org
gits clone-all <username>
# Clone with custom server
gits clone-all <org> --server git.ourworld.tf
Initialize New Repository¶
Interactive setup for new Git repositories with platform selection.Repository Operations¶
Batch Operations¶
Push Changes Across Repositories¶
# Interactive mode
gits push-all
# Batch mode with message
gits push-all --batch -m "Update documentation"
# With AI commit messages (via Pal)
gits push-all -py
AI-Powered Commits with Pal
The -py flag uses Pal by Scott Yeager to automatically generate meaningful commit messages based on your changes. This is the fastest way to commit across multiple repositories.
Status Check Across Repositories¶
# Show repositories needing attention
gits status-all
# Show all repositories
gits status-all --all
# List repos with branch info
gits list-all
Pull Updates¶
# Pull with conflict detection
gits pull-all
# Use rebase strategy
gits pull-all --strategy rebase
# Fast-forward only
gits pull-all --strategy ff-only
Compare Branches Across Repositories¶
# Compare branches
gits diff-all main feature-branch
# Use suffix mode (auto-detect default branches)
gits diff-all --suffix -feature
# Quiet mode - only show repos with differences
gits diff-all main develop --quiet
Branch Management¶
Create and Switch Branches¶
Delete Branches¶
Align Branches Across Repositories¶
# Set all repos to same branch
gits set-all <branch-name>
# Rename branches with suffix
gits set-all --suffix -feature
Pull Request Management¶
Create Pull Request¶
Interactive PR creation with platform selection.Close Pull Request¶
Merge Pull Request¶
Create PRs Across All Repositories¶
# Dry run to preview what would be created
gits pr create-all --title "Feature X" --base main --dry-run
# Create PRs using suffix mode (e.g., main-qr → main)
gits pr create-all --title "QR Feature" --base main --suffix -qr
# Create PRs with explicit head branch
gits pr create-all --title "Update" --base main --head feature-branch
# Create PRs with description
gits pr create-all --title "Fix" --base main --body "Bug fixes and improvements"
Smart Diff Detection
pr create-all only creates PRs for repositories that have actual differences between the head and base branches. Repositories without changes are automatically skipped.
Why Use --suffix Mode?
The --suffix mode is powerful when working with repositories that have different default branches. For example:
repo-backendusesmainas default → creates PR frommain-feature→mainrepo-frontendusesdevelopmentas default → creates PR fromdevelopment-feature→developmentrepo-docsusesmainas default → creates PR frommain-feature→main
With --suffix -feature, GitS auto-detects each repo's default branch and applies the suffix. You don't need to worry about which repos use main vs development vs master - it just works!
Options:
| Option | Description |
|---|---|
--title |
PR title (required) |
--base |
Target branch to merge into (omit when using --suffix for auto-detection) |
--suffix |
Branch suffix mode - auto-detects default branch per repo (e.g., -qr, -feature) |
--head |
Explicit head branch name (use instead of --suffix for same branch across all repos) |
--body |
PR description |
--dry-run |
Preview without creating PRs |
Merge PRs Across All Repositories¶
# Dry run to preview
gits pr merge-all --dry-run
# Merge all open PRs
gits pr merge-all
# Merge and delete branches after
gits pr merge-all --delete-branch
Options:
| Option | Description |
|---|---|
--delete-branch, -d |
Delete head branch after merge |
--dry-run |
Preview without merging |
Get Latest PR Number¶
Returns the latest PR number for the current repository. Useful for scripting:Issue Management¶
Fetch Issues¶
# Fetch open issues
gits fetch-issues
# Fetch all issues (open/closed)
gits fetch-issues --state all
# JSON output
gits fetch-issues --format json
Save Issues to Files¶
# Save as markdown files
gits save-issues
# Save all issues
gits save-issues --state all
# Save as JSON
gits save-issues --format json
Batch Issue Operations¶
# Fetch issues from all repos
gits fetch-issues-all
# Save issues from all repos
gits save-issues-all --state all
Authentication Management¶
Platform Login¶
Interactive login supporting GitHub, Gitea, and Forgejo.Token Management¶
# List cached tokens
gits token list
# Show specific token
gits token show <server>
# Clear token
gits token clear <server>
AI-Powered Commits with Pal¶
GitS integrates with Pal by Scott Yeager for AI-powered commit message generation. This integration makes committing changes across multiple repositories incredibly fast and meaningful.
How It Works¶
When you use the -p or -py flags, GitS invokes Pal to analyze your staged changes and generate a descriptive commit message:
# Interactive mode - review commit message before committing
gits push-all -p
# Auto-commit mode - generate and commit immediately
gits push-all -py
# Quick workflow with AI
gits up # Equivalent to: git add . && pal /commit -y && git push
Installing Pal¶
To use AI-powered commits, install Pal:
Example Workflow¶
# Make changes across multiple repos
# ...
# Push all with AI-generated commit messages
gits push-all -py
# Output:
# 📁 ./backend - Analyzing changes...
# ✅ Committed: "Add user authentication middleware with JWT validation"
# 📁 ./frontend - Analyzing changes...
# ✅ Committed: "Update login form with validation and error handling"
# 📁 ./docs - Analyzing changes...
# ✅ Committed: "Document authentication flow and API endpoints"
Complete Workflow Examples¶
Multi-Repository Feature Development¶
A complete workflow from feature branch to merged PRs across an entire organization:
# 1. Clone all organization repositories
gits clone-all myorg
# 2. Create feature branch across all repos (using suffix)
gits set-all --suffix -feature
# This creates: main-feature, development-feature, etc. based on each repo's default
# 3. Make changes in each repository
# ... development work ...
# 4. Push all changes with AI-generated commits (via Pal)
gits push-all -py
# 5. Preview PR creation (suffix auto-detects default branches)
gits pr create-all --title "New Feature" --suffix -feature --dry-run
# Shows: repo-api (main-feature → main), repo-web (development-feature → development), etc.
# 6. Create PRs across all repos with differences
gits pr create-all --title "New Feature" --suffix -feature
# Each PR targets the correct default branch automatically!
# 7. After code review, merge all PRs
gits pr merge-all --delete-branch
# 8. Switch back to default branches
gits set-all --suffix "" # or manually: gits set-all main
The Power of --suffix
Notice we use --suffix -feature throughout. This means:
- Repos with
mainas default: work onmain-feature, PR tomain - Repos with
developmentas default: work ondevelopment-feature, PR todevelopment - Repos with
masteras default: work onmaster-feature, PR tomaster
One command, any mix of default branches. No manual tracking needed.
Daily Development Routine¶
# Morning: Pull latest changes
gits pull-all
# Check status across repos
gits status-all
# Work on features...
# End of day: Push changes with AI commits
gits push-all -py
Repository Maintenance¶
#!/bin/bash
# Weekly repo maintenance
echo "🧹 Starting repository maintenance..."
# Fetch all updates
gits fetch-all --no-tags
# Check status
gits status-all
# Check for open issues
gits fetch-issues-all --state open
echo "✅ Maintenance complete!"
Microservices Dependency Update¶
# Update a shared dependency across 20 microservices
# 1. Ensure all repos are clean
gits status-all
# 2. Create update branch
gits set-all deps-update
# 3. Update dependencies in each repo
# ... run update scripts ...
# 4. Commit all with descriptive message
gits push-all --batch -m "chore: bump shared-lib to v2.0.0"
# 5. Create PRs
gits pr create-all --title "Bump shared-lib to v2.0.0" --base main
# 6. After CI passes, merge all
gits pr merge-all --delete-branch
Platform-Specific Features¶
GitHub Integration¶
- Native GitHub CLI integration
- Automatic PR merging
- Enhanced PR descriptions
- Branch cleanup after merge
Gitea/Forgejo Support¶
- API-based operations (no CLI required for basic functions)
- Custom server support
- Token-based authentication
- Full repository management
Cross-Platform Compatibility¶
- Consistent command interface across platforms
- Automatic platform detection
- Unified authentication flow
- Platform-specific optimizations
Configuration¶
Default Settings¶
gits uses sensible defaults but can be customized:
- Default Branch:
main - Merge Strategy:
merge - Concurrent Operations: 5 parallel processes
- Conflict Handling: Abort on first conflict
Custom Configuration¶
Create ~/.config/gits/config for custom settings:
# Example configuration
DEFAULT_BRANCH="develop"
MERGE_STRATEGY="rebase"
MAX_CONCURRENT=10
AUTO_RESOLVE_CONFLICTS=false
Troubleshooting¶
Common Issues¶
Authentication Failures¶
GitHub:
Gitea/Forgejo:
Permission Denied¶
# Check repository access
git remote -v
git ls-remote origin
# Verify token permissions
gits token show <server>
Merge Conflicts¶
# Manual resolution
gits pull # Stop at conflict
# Resolve conflicts manually
git add <resolved-files>
git commit
Debug Mode¶
Enable verbose output:
Integration with Other Tools¶
IDE Integration¶
VS Code¶
Add to .vscode/tasks.json:
{
"tasks": [
{
"label": "Git Pull All",
"type": "shell",
"command": "gits",
"args": ["pull-all"],
"group": "build"
},
{
"label": "Git Push All (AI)",
"type": "shell",
"command": "gits",
"args": ["push-all", "-py"],
"group": "build"
}
]
}
Shell Integration¶
Add to ~/.bashrc or ~/.zshrc:
# Quick git status across repos
alias gs='gits status-all'
# Fast push all with AI commits
alias gpa='gits push-all -py'
# Pull everything
alias gpl='gits pull-all'
# Create PRs across repos
alias gpr='gits pr create-all'
CI/CD Pipelines¶
GitHub Actions¶
- name: Update Repositories
run: |
gits pull-all --strategy rebase
gits push-all --batch -m "CI: Update dependencies"
GitLab CI¶
update-repos:
script:
- gits pull-all --strategy merge
- gits push-all --batch -m "CI: Update repositories"
Security Considerations¶
- Token Storage: Tokens stored securely with 600 permissions in
~/.config/gits/tokens.conf - HTTPS Only: All operations use HTTPS for security
- Audit Trail: Command logging for accountability
- Access Control: Platform-specific permission validation
Contributing¶
Development Setup¶
# Clone repository
git clone https://github.com/ucli-tools/gits.git
cd gits
# Install development dependencies
make dev-setup
# Run tests
make test
# Install locally
make install-dev
Code Style¶
- Follow Bash best practices
- Use descriptive variable names
- Add error handling for all operations
- Include documentation for new features
Changelog¶
Version 2.1.0¶
- PR Batch Management: New
pr create-allandpr merge-allcommands - Smart Diff Detection: Only creates PRs for repos with actual changes
- Suffix Mode: Support for branch suffix patterns in PR operations
- Dry Run Support: Preview batch operations before executing
Version 2.0.0¶
- Multi-platform support (Forgejo, Gitea, GitHub)
- Parallel processing for batch operations
- AI-powered commit messages via Pal integration
- Enhanced error handling
- Improved documentation
Version 1.5.0¶
- Batch repository operations
- Issue management features
- Token caching system
- Cross-platform compatibility
Version 1.0.0¶
- Initial release
- Basic Git workflow automation
- Single repository operations
- Platform-specific integrations
Support¶
- Documentation: docs.ucli.tools/tools/gits
- Issues: GitHub Issues
- Discussions: Community Forums
Credits¶
- Pal by Scott Yeager - AI-powered commit message generation
License¶
Licensed under the Apache License 2.0. See LICENSE for details.
Ready to streamline your Git workflow? Try ucli build gits to get started!
UCLI Tools Ecosystem
Professional CLI tools for developers