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 (and optionally cd into it)
# Or with automatic cd:
# Now urur commands run on that repo
# Open in editor or browser
# See what's selected
# Back to multi-repo mode (and optionally cd to workspace)
# Or with automatic cd:
Shell Integration
For seamless cd on select/unselect, add to your .bashrc or .zshrc:
# Shell wrapper for urur select/unselect with automatic cd
# Alternative: simple cd helper
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.
New Features
Interactive TUI
Launch an interactive dashboard to view and manage all repositories:
# or
Import from GitHub/GitLab
Bulk import repositories from your GitHub or GitLab account:
# Import all your GitHub repos
# Import private repos too (requires GITHUB_TOKEN)
# Filter by language
# Import from GitLab
Hooks
Run custom commands before/after operations:
[]
= "echo 'Starting clone...'"
= "npm install"
= "echo 'Syncing...'"
= "notify-send 'Sync complete'"
Search Across Repos
Search for patterns across all repositories:
Roadmap
- Core workspace management
- Group and tag filtering
- Select mode for single-repo focus
- Shell completions
- Progress bars during operations
- Interactive TUI mode
- GitHub/GitLab import
- Hooks system
- Search across repos
- Parallel operations
- Repository templates
- Cloud config sync
See ROADMAP.md for detailed plans.