Gitlab repository mirroring

git, gitlab, mirroring, version-control

Solution

Update Dec 2016: Mirroring is suported with GitLAb EE 8.2+: see "Repository mirroring".

As commented by Xiaodong Qi:

This answer can be simplified without using any command lines (just set it up on Gitlab repo management interface)

Original answer (January 2013)

If your remote mirror repo is a bare repo, then you can add a post-receive hook to your gitlab-managed repo, and push to your remote repo in it.

#!/bin/bash
git push --mirror slave_user@mirror.host:/path/to/repo.git

As Gitolite (used by Gitlab) mentions:

if you want to install a hook in only a few specific repositories, do it directly on the server.

which would be in:

~git/repositories/yourRepo.git/hook/post-receive

Caveat (Update Ocotober 2014)

Ciro Santilli points out in the comments:

Today (Q4 2014) this will fail because GitLab automatically symlinks github.com/gitlabhq/gitlab-shell/tree/… into every repository it manages. So if you make this change, every repository you modify will try to push. Not to mention possible conflicts when upgrading `gitlab-shell`, and that the current script is a ruby script, not bash (and you should not remove it!).

You could correct this by reading the current directory name and ensuring bijection between that and the remote, but I recommend people to stay far far away from those things

See (and vote for) feeadback "Automatic push to remote mirror repo after push to GitLab Repo".

Update July 2016: I see this kind of feature added for GitLab EE (Enterprise Edition): MR 249

- Add ability to enter remote push URL under Mirror Repository settings

- Add implementation code to push to remote repository

- Add new background worker

- Show latest update date and sync errors if they exists.

- Sync remote mirror every hour.

Note that the recent `Remote Mirror Repository` (issues 17940) can be tricky:

I'm currently trying to shift main development of the Open Source npm modules of my company Lossless GmbH (https://www.npmjs.com/~lossless) from GitHub.com to GitLab.com

I'm importing all the repos from GitHub, however when I try to switch off `Mirror Repository` and switch on `Remote Mirror Repository` with the original GitHub URL I get an error saying:

Remote mirrors url is already in use

Here is one of the repos this fails with: https://gitlab.com/pushrocks/npmts Edited 2 months ago

turns out, it just requires multiple steps:

- disable the Mirror Repository

- press save

- remove the URl

- press save

- then add the Remote Mirror

Problem

Is it possible to have gitlab set up to automatically sync (mirror) a repository hosted at another location? At the moment, the easiest way I know of doing this involves manually pushing to the two (gitlab and the other) repository, but this is time consuming and error prone. The greatest problem is that a mirror can resynchronize if two users concurrently push changes to the two different repositories. The best method I can come up with to prevent this issue is to ensure users can only push to one of the repositories.

Original source

Related problems