Project

repohub

0.0
The project is in a healthy, maintained state
Repomate helps you maintain a list of git repositories and keep them up to date with their remote sources
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 13.0
~> 3.0

Runtime

~> 1.4
~> 1.7
 Project Readme

RepoMate 🧉

A command-line tool to manage and synchronize multiple git repositories. This tool helps you maintain a list of git repositories and keep them up to date with their remote sources.

Features

  • Maintain a list of repositories to sync
  • Add and remove repositories from the sync list
  • Automatically clone new repositories
  • Update existing repositories
  • Pattern-based filtering for selective syncing
  • Support for multiple shells (bash, fish, zsh)
  • Configurable paths for code and configuration storage

Installation

As a Gem (Recommended)

gem install repomate

From Source

  1. Clone the repository:
git clone git@github.com:alex-quiterio/repomate.git
cd repomate
  1. Install dependencies:
bundle install
  1. Build and install the gem:
gem build repomate.gemspec
gem install repomate-*.gem

Shell Integration (Optional)

Choose the appropriate shell integration for enhanced functionality:

Fish Shell

mkdir -p ~/.config/fish/functions
cp shell/fish/repomate.fish ~/.config/fish/functions/

Zsh

# Add to your ~/.zshrc
source /path/to/repomate/shell/zshell/repomate.zshell

Bash

# Add to your ~/.bashrc or ~/.bash_profile
source /path/to/repomate/shell/bash/repomate.bash

Usage

The tool can be used directly from the command line after installation.

Basic Commands

# List all repositories in the sync list
repomate list

# Sync all repositories
repomate sync

# Sync repositories matching a pattern
repomate sync -p "myproject"

# Add a repository to the sync list
repomate add -l "git@github.com:alex-quiterio/repomate.git"

# Remove a repository from the sync list
repomate remove -l "git@github.com:alex-quiterio/repomate.git"

Available Options

  • -l, --repo-url URL: Specify a repository URL (for add/remove)
  • -p, --pattern PATTERN: Filter repositories by pattern (for sync/list)
  • -h, --help: Show help information
  • -v, --version: Show version information

Repositories Configuration File

The configuration file is a simple text file with one repository URL per line. For example:

git@github.com:user/repo1.git
git@github.com:user/repo2.git
git@github.com:organization/repo3.git

The file will be automatically created at $HOME/code/.subscribed-repos if it doesn't exist.

Behavior

  • When syncing repositories:

    • If a repository doesn't exist locally, it will be cloned
    • If a repository exists locally, it will be updated (git pull)
    • Updates are performed on the default branch (main/master)
    • Handles uncommitted changes by stashing them temporarily during updates
    • Supports pattern-based filtering to sync only matching repositories
  • When adding repositories:

    • Duplicate repositories are not allowed
    • The URL is validated before adding
    • Repository is automatically cloned after being added to the list
  • When removing repositories:

    • Repository URL is removed from the sync list
    • Local repository files are also deleted from disk
  • Configuration:

    • Default code directory: $HOME/code
    • Default config file: $HOME/code/.subscribed-repos
    • Directories are created automatically if they don't exist

Requirements

  • Ruby 2.6.0 or higher
  • Git
  • Optional: Fish, Zsh, or Bash shell (for enhanced shell integration)

Help

To see all available options and commands:

repomate --help