git-mirror is designed to create and serve read-only mirrors of your Git repositories locally or wherever you choose. A recent GitHub outage reinforces the fact that developers shouldn't be relying on a single remote for hosting code.
A major design goal of git-mirror is that it should just work with as little configuration as possible.
Download and extract the latest release from the releases page.
Create config.toml similar to:
[[repo]]
Origin = "https://github.com/beefsack/git-mirror.git"By default it will update the mirror every 1 minute and will serve the mirror over HTTP using port 8080. You can specify as many repos as you want by having multiple [[repo]] sections.
Run git-mirror with the path to the config file:
$ ./git-mirror config.toml
2015/05/07 11:08:06 starting web server on :8080
2015/05/07 11:08:06 updating github.com/beefsack/git-mirror.git
2015/05/07 11:08:08 updated github.com/beefsack/git-mirror.gitNow you can clone from your mirror on the default port of 8080:
$ git clone http://localhost:8080/github.com/beefsack/git-mirror.git
Cloning into 'git-mirror'...
Checking connectivity... done.You can run it with docker:
docker run --rm -ti -v /your_config/path:/config kumekay/git-mirror /config/config.toml
Or with docker compose, for example:
services:
git-mirror:
image: kumekay/git-mirror
ports:
- "8080:8080"
command: ["/etc/git-mirror/config.toml"]
volumes:
- /opt/git-mirror/data:/git-mirror
- /opt/git-mirror/config:/etc/git-mirror
restart: always
See the example config for more advanced configurations.
If you wish to control access to the mirror or specific repositories, consider proxying to git-mirror using a web server such as Nginx.