#repository #command-line-tool #management #cli

bin+lib repos-tool

A simple command line tool to manage local repositories

5 releases

Uses old Rust 2015

0.1.4 Nov 22, 2018
0.1.3 Sep 20, 2018
0.1.2 Sep 18, 2018
0.1.1 Sep 13, 2018
0.1.0 Sep 9, 2018

#244 in #management


687 lines


A simple command line tool to manage local repositories.


  • Metadata file is managed by user self manually

    The metadata of local repository should be managed by user self manually. The repos command line tool only reads the metadata for operations and never modifies it.

    Please take a look at https://github.com/toml-lang/toml to get a quick introduction of toml format.

  • Vcs support is done by spawning vcs process

    Currently, the repos command line tool calls vcs process for synchronizing repositories.

    Please make sure to put vcs command line programs in the path environment before using repos command line to synchronizing repositories.


First, install Rust https://www.rust-lang.org/install.html .


cargo build --release

Copy the built target/release/repos (target\release\repos.exe in Windows) command line executable program to any place for use.


Prepare your metadata file

See Repos.sample.toml for sample.

To use the sample metadata file, just copy it to the root directory of your repositories and rename it to Repos.toml.

Add a new repository

  1. Put new repository metadata to Repos.toml
  2. Run repos sync {repo_url}

Update an existed repository

Run repos sync {repo_url}.

Remove an existed repository

  1. Run repos remove {repo_url}
  2. Delete repository metadata from Repos.toml manually

Update all repositories

Run repos sync.

List repositories of a topic

Run repos topic {topic}.

List all topics with count of their repositories

Run repos topics.

Output stats of all repositories

Run repos stats.

Clean up unused resources

Run repos cleanup.

Search repositories

Run repos search {keyword}.

Output proxy configuration

Run repos proxy.

Change proxy configuration

Edit proxy section in metadata file.


See Repos.template.toml for an overview.


  • url: follow usage of vcs
  • vcs: version control system. choices: git, hg
  • allow_sync: whether synchronized to local, or just marked in metadata
  • bare: whether bare
  • use_proxy: whether using proxy for sync
  • topics: topics belong to


  • scheme: choices: http, socks5
  • host
  • port

Local files and directories

These files and directories are all in current/working directory (pwd).

Metadata file


repository directory


e.g. repository directory of url https://example.com/org/repo.git is example.com/org/repo.


  • sync: update or clone if a repository url provided, else synchronize all repositories
  • remove: remove local directory of a repository
  • topics: list all topics with count of their repositories
  • topic: list repositories of a topic
  • stats: output stats of all repositories
  • cleanup: clean up unused resources
  • search: search repositories by keyword
  • proxy: output proxy configuration


repos sync https://github.com/org/repo.git
repos sync
repos remove https://github.com/org/repo.git
repos topics
repos topic rust
repos stats
repos cleanup
repos search keyword
repos proxy


There are some limitations now.

  • Relative URLs without base (scp-like syntax) are not supported.

    e.g. [user@]host.xz:path/to/repo.git or [user@]host.xz:~/path/to/repo.git

  • The bare attribute of a repository is only used for cloning the repository.

  • Proxy configuration is global. This may be changed in the future.

  • Vcs only supports git and hg(Mercurial) now.


~96K SLoC