Multi-repository management command-line tool.
This is handy when you're working on multiple SCM repositories and/or on multiple computers.
E.g. rather than updating each repository one by one, it's easier to just run repoman get
and update all of them in one go. Rather than checking for uncommitted local changes one by one, it's easier to just run repoman changes
and check all in one go.
And if you often switch between multiple computers, simply use the same .repoman.json file on those computers and easily manage the same set of repositories.
If you are a GitHub user, you can use Repoman to clone all of your repositories from GitHub with a one liner: repoman --github-user <user> && repoman init
.
npm install -g repoman
Create sample .repoman.json configuration file:
repoman config
Create .repoman.json containing GitHub projects of a user:
repoman config --github-user cliffano
Create .repoman.json containing GitHub projects of an organisation:
repoman config --github-org jenkinsci
Create .repoman.json containing GitHub projects of multiple users and organisations:
repoman config --github-user cliffano --github-org jenkinsci,github
Create .repoman.json containing Bitbucket projects:
repoman config --bitbucket-auth-user cliffano --bitbucket-auth-pass somepassword
Create .repoman.json configuration file from local repositories in current directory:
repoman config --local
Initialise local repositories:
repoman init
Update local repositories with changes from remote repositories:
repoman get
Display the changes in local repositories:
repoman changes
Update remote repositories with changes from local repositories:
repoman save
Delete local repositories:
repoman delete
Delete non-Repoman local repositories:
repoman clean
Remove uncommitted changes from local repositories:
repoman undo
Execute custom command against local repositories:
repoman exec 'touch .gitignore && echo "Created {{{workspace}}}/{{{name}}}/.gitignore file;"'
You can use mustache.js templates in the custom command. The variables workspace
and name
will be substituted by the workspace directory (where your .repoman.json
lives) and the directory name of the repository respectively. Additionally, the variable pathseparator
will be replaced by path.sep
, that is by \\
on Windows and /
on all Unix-based operating systems. Note: It is recommended to use {{{
and }}}
instead of {{
and }}
to avoid the HTML-escaping mustache.js does for the latter.
Execute custom command and exit as soon as there is any command failure:
repoman --fail-fast exec 'chown -R user:group /some/path/{name}';
Write repository names to standard output and pipe to another command:
repoman list | parallel nestor build {}
Override default .repoman.json configuration file:
repoman -c somerepoman.json init|get|changes|save|delete|clean|exec|list
Filter repositories by tags, if multiple tags (comma-separated) are specified then repo will be included if it matches at least one tag:
repoman --tags apache,github init|get|changes|save|delete|exec|list
Filter repositories by regex against repo name or URL:
repoman --regex .*github.* init|get|changes|save|delete|exec|list
Repoman uses the following SCM command mapping, it currently only supports Git and Subversion:
Repoman | Git | Subversion |
---|---|---|
repoman init | git clone {url} | svn checkout {url} |
repoman get | git pull | svn up |
repoman changes | git status | svn stat |
repoman save | git push origin master | svn commit -m "Commited by Repoman" |
repoman undo | git stash + git stash clear | svn revert -R . |
Repositories can be configured in .repoman.json file:
{
"couchdb": {
"type": "git",
"url": "http://git-wip-us.apache.org/repos/asf/couchdb.git",
"tags": ["apache", "database"]
},
"httpd": {
"type": "svn",
"url": "http://svn.apache.org/repos/asf/httpd/httpd/trunk/",
"tags": ["apache", "webserver"]
},
"node": {
"type": "git",
"url": "http://github.com/joyent/node",
"tags": ["github", "javascript"]
}
}
Type property is optional. If not provided, Repoman will try to determine the type from the URL by checking the existence of keywords: git, svn, subversion. If type can't be determined from the URL, it defaults to git.
Repoman will choose which configuration file to use in this order:
- Any file specified in -c/--config-file flag
- .repoman.json file in the current directory
- .repoman.json file in home directory (process.env.USERPROFILE on Windows, process.env.HOME on *nix)
Run npm run build
to kick off the full build including tests, integration tests, coverage etc.
Repoman has been developed by @cliffano until late 2015. Nowadays it is maintained by @basti1302.