monos gem - monorepo / mono source tree tools and (startup) scripts

Hello,

   I've put together the new monos gem [1]
that sports some little tools that let you manage monorepos / mono
source trees (for ruby gems).

  It's an early stage -
for now the `mono` (or short `mo`) command line tool
lets you run git commands on multiple repo(sitories) with a single command.

What's your style / approach? Do you keep all your ruby gems
in a (single mono) repo or do you use one repo for one gem only
or do you mix 'n' match?

Any tools and scripts you can recommend or highlight
for running git commands on multiple-repos or managing "virtual" or
real monorepos?

  Cheers. Prost.

[1] https://github.com/sportdb/sport.db/tree/master/monos

PS: From the readme:

### Usage

The `mono` (or short `mo`) command line tool lets you run
git commands on multiple repo(sitories) with a single command.

### Setup

#### 1) The monorepo (single source tree) root - `MOPATH`

Use the `MOPATH` environment variable to set the monorepo (single
source tree) root
path. The builtin default for now is `/sites`.

#### 2) The configuration / manifest file to list all repos - `monorepo.yml`

Add all repo(sitories) to the `monorepo.yml` that you want
to be part of the "virtual" all-in-one / single mono source tree
in your project. Example:

``` yaml

···

###############
# use latest sportdb machinery (from source)
sportdb:
- sport.db
- sport.db.sources
- football.db

##############################
# auto-update machinery (from source)
yorobot:
- cache.csv
- sport.db.more
- football.db
- football.csv

#####################
# football.db - open football
openfootball:
- leagues
- clubs


### Commands

`status` • `sync` • `env`

### `status` Command

Use the `status` command to check for changes (will use `git status
--short`) on all repos. Example:

$ mono status
$ mono # status is the default command
$ mo status # mo is a "shortcut" convenience alias for mono
$ mo stat
$ mo


resulting in something like:

2 change(s) in 9 repo(s) @ 3 org(s)

== sportdb@sport.db - CHANGES:
M monos/Manifest.txt
M monos/README.md
M monos/Rakefile
M monos/lib/mono/git/status.rb
M monos/lib/mono/git/sync.rb
M monos/lib/mono/version.rb
RM monos/lib/monoscript.rb -> monos/lib/monos.rb
M monos/test/test_base.rb
?? monos/bin/

== yorobot@football.csv - CHANGES:
?? footballdata/


### `sync` Command

Use the `sync` command to sync up (pull) changes (will use `git pull
--ff-only`) on all existing repos and `git clone` for new
not-yet-cloned repos. Example:

$ mono sync
$ mono install # install is an alias for sync
$ mono get # get is another alias for sync
$ mo sync # mo is a "shortcut" convenience alias for mono
$ mo get
$ moget # moget is a "shortcut" convenience alis for mono get
```

Note: `install` or `get` or `up` are all aliases that you can use for `sync`.

Note: `moget` is a shortcut convenience command for `mono get` (or,
that is, `mono sync`).

Hello,

  Errata: FYI: I have moved the monos gem [1] that incl. monorepo /
mono source tree tools and (startup) scripts
  to its own "top-level" repo, please update any (broken) links.

  With the latest update I also added a backup command - from the readme:

Use the `backup` command to backup all repos using
the `gitti-backup` machinery [2].

In a nutshell backup will backup all repos by using
1. `git clone --mirror` or
2. `git remote update` (if the local backup already exists)
and store all bare repos (without workspace) in the `~/backup` directory.

  Cheers. Prost.

[1] https://github.com/rubycoco/monos
[2] https://github.com/rubycoco/gitti/tree/master/gitti-backup