Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bachp/git-mirror
A small utility that allows to mirror external repositories to GitLab, GitHub and possible more.
https://github.com/bachp/git-mirror
git github gitlab mirror repository-utilities rust
Last synced: 7 days ago
JSON representation
A small utility that allows to mirror external repositories to GitLab, GitHub and possible more.
- Host: GitHub
- URL: https://github.com/bachp/git-mirror
- Owner: bachp
- License: mit
- Created: 2017-06-12T21:32:36.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2025-01-10T11:12:50.000Z (16 days ago)
- Last Synced: 2025-01-12T02:13:53.262Z (14 days ago)
- Topics: git, github, gitlab, mirror, repository-utilities, rust
- Language: Rust
- Homepage:
- Size: 1.03 MB
- Stars: 153
- Watchers: 7
- Forks: 22
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-repositories - bachp/git-mirror - A small utility that allows to mirror external repositories to GitLab, GitHub and possible more. (Rust)
README
# Git Mirror
Git Mirror will watch a GitLab or GitHub groups and keep it in sync with external git repositories.
## Usage
Install git and git-lfs.
1. Create group on your gitlab instance or gitlab.com. e.g. `mirror-test`
2. Add a repository you like to sync to. e.g `my-project`
3. Add a description to the project in YAML format containing an `origin` field. e.g. `origin: https://git.example.org/my-project.git`
4. Execute set the `PRIVATE_TOKEN` environment variable a personal access token or your private token and execute `git-mirror```` sh
export PRIVATE_TOKEN=""
git-mirror -g mirror-test
```This will sync the group `mirror-test` on gitlab.com. If you want to sync a group on a different GitLab instance, use the `-u` flag.
``` sh
git-mirror -g mirror-test -u http://gitlab.example.org
```### Multiple concurrent jobs
`git-mirror` allows to execute multiple mirror jobs in parallel using the `-c ` flag.
``` sh
git-mirror -g mirror-test -c 8
```This will execute at most 8 sync jobs in parallel
### Description format
For `git-mirror` to mirror a repository it needs to know where to sync from.
In order to achive this `git-mirror` expects the description field of a mirrored project to
be valid [YAML](http://yaml.org/) with at least an `origin` field.``` yaml
origin: https://git.example.org/my-project.git
```A list of currently supported fields
- `origin` Source repository to mirror from
- `skip` Temporarily exclude a project from syncing by adding `skip: true`
- `destination` Reserved for future use
- `lfs` Disable git lfs mirror for a specific repo with `lfs: false` (default is `true`), only relevant if git-mirror is started with `--lfs`
- `refspec` Push only refspec.
Add the refspec list to use it. Any valid refspec is possible.
E.g.
```yaml
refspec: ["master", "2.0", "+refs/tags/*:refs/tags/*"]
```
See also https://git-scm.com/book/en/v2/Git-Internals-The-Refspec
Note: If set, this field would override the default (global) refspec from the command line option `--refspec`, if specified. Multiple refs can be set by repeating the option.Any other fields are ignored
### Mirror to GitHub
`git-mirror` also supports mirroring to GitHub.
This can be done by specifying GitHub as provider:
``` sh
export PRIVATE_TOKEN=""
git-mirror -g mirror-test -p GitHub
```This has been tested against github.com but it might also work with on premise installations of GitHub.
## Docker
There is also a docker image available. It can be used as follows:
```
docker run -e PRIVATE_TOKEN="x" bachp/git-mirror git-mirror -g mirror -u http://gitlab.example.com
```## Building & Installing
In order to build this project you need a least rust v1.18.0. The easiest way to get rust is via: [rustup.rs](http://rustup.rs/)
The project can be built using cargo
```
cargo build
```## They're using Git Mirror
* [gitlab-mirror-orchestrator](https://gitlab.ow2.org/ow2/gitlab-mirror-orchestrator) tool at OW2 Consortium.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details