urur-0.1.2 has been yanked.
urur
A multi-repo workspace manager for developers who work across many distributed Git repositories.
Why urur?
If you work with multiple Git repositories spread across GitHub, GitLab, and other hosts, you know the pain of:
- Cloning repos one by one
- Checking status of 10+ repos manually
- Running the same command in each repo
- Remembering which repos need to be pulled
urur solves this with a single configuration file that manages all your repositories.
# Clone all your repos
# Check status everywhere
# Pull everything
# Run any command across repos
Installation
From crates.io
From source
Pre-built binaries
Download from the releases page.
Quick Start
# 1. Initialize a workspace
&&
# 2. Add repositories
# 3. Clone everything
# 4. Check status
Configuration
urur uses a .urur.toml file for configuration:
[]
= "my-workspace"
= "All my projects"
[]
= "main"
= false
= 4
[[]]
= "project-a"
= "git@github.com:user/project-a.git"
= "work/project-a" # Custom directory structure
= "develop" # Override default branch
= ["work", "rust"]
[[]]
= "project-b"
= "git@github.com:user/project-b.git"
= "personal/project-b"
= ["personal", "python"]
[]
= ["project-a"]
= ["project-a"]
Repository Options
| Field | Description | Default |
|---|---|---|
name |
Unique identifier | Derived from URL |
url |
Git clone URL (HTTPS or SSH) | Required |
path |
Local directory path | Same as name |
branch |
Default branch | From defaults.branch |
tags |
Tags for filtering | [] |
shallow |
Shallow clone | false |
disabled |
Skip this repo | false |
Commands
Workspace Management
Repository Operations
# Add/remove repos
# Clone
Status and Sync
Git Operations
Stash and Branch
# Stash operations
# Branch operations
Execute Commands
Group Management
Select Mode
Focus on a single repository and use urur as a git alias:
# Select a repo
# Now urur commands run on that repo
# See what's selected
# Back to multi-repo mode
Shell Integration
Add to your .bashrc or .zshrc:
# cd to selected repo
Shell Completions
Generate shell completions:
# Bash
# Zsh
# Fish
# PowerShell
Examples
Organize by Project Type
[[]]
= "frontend"
= "git@github.com:company/frontend.git"
= "web/frontend"
= ["web", "typescript"]
[[]]
= "backend"
= "git@github.com:company/backend.git"
= "api/backend"
= ["api", "rust"]
[[]]
= "mobile"
= "git@github.com:company/mobile.git"
= "mobile/app"
= ["mobile", "react-native"]
Work vs Personal
[]
= ["frontend", "backend", "mobile"]
= ["dotfiles", "blog", "side-project"]
# Pull only work repos
# urur pull --group work
# Status of personal projects
# urur status --group personal
Microservices
[[]]
= "auth-service"
= "git@github.com:company/auth-service.git"
= ["service", "critical"]
[[]]
= "user-service"
= "git@github.com:company/user-service.git"
= ["service"]
[[]]
= "payment-service"
= "git@github.com:company/payment-service.git"
= ["service", "critical"]
# Run tests on all services
# urur exec "make test" --tag service
# Check critical services
# urur status --tag critical
Comparison with Other Tools
| Feature | urur | git-repo | gita | myrepos |
|---|---|---|---|---|
| Config format | TOML | XML | YAML | Config file |
| Tags/Groups | Yes | Yes (projects) | Yes | No |
| Custom paths | Yes | Limited | No | Yes |
| Select mode | Yes | No | No | No |
| Shell completions | Yes | Yes | Yes | No |
| Written in | Rust | Python | Python | Perl |
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Roadmap
- Core workspace management
- Group and tag filtering
- Select mode for single-repo focus
- Shell completions
- Parallel operations with progress bars
- Interactive mode
- Repository templates
- Cloud config sync
See ROADMAP.md for detailed plans.