Migrate repos between instances of Gitlab

14,395

Solution 1

One option would be to:

  1. Clone the old repo from gitlab onto a dev machine.
  2. Create a blank repo on the new gitlab.
  3. Add the new repo as a remote on the dev machine.
  4. Push everything back to the new repo.
  5. Remove the old repo from remote repos list.

To create a remote called newRepo, do: git remote add newRepo gitlab.localhost.com:User/newRepo.git (replace the url on the end with the one for your repo)

Solution 2

I recently migrated from gitolite to gitlab and the official rake task gitlab:import:repos worked for me. I am using gitlab 6.1.0 (82f3446). Here is what I did:

  • rsync bare repos from gitolite to repositories/{group}/. Make sure to replace {repository} with the name of the gitolite repo, and change the hostname of your gitlab server.

    rsync -rth --progress repositories/{repository}.git \
    git@gitlab-server:/home/git/repositories/{group}/
    

    Here, {group} is the name of the user group you want the repository to be added to. If you don't have any specific group, choose root as the group name.

  • Fix permissions – only necessary when the rsync user is not git:

    sudo chown -R git:git repositories/{group}/
    
  • cd ~/gitlab

  • Run the rake task to import all new repositories:

    bundle exec rake gitlab:import:repos RAILS_ENV=production
    

Now if you login as Administrator you will find the new project added.

For more information, refer to the "Import bare repositories into GitLab project instance" under http://{your-gitlab-server}/help/raketasks.

In your case, you can login to your old TKL system and rsync all bare repos to the new instance, followed by an import.

Solution 3

I did it practically the following way after reading ChrisA answer, which gave me a little headache about how to do it practically. The example copies a repo from github to gitlab, to make source and destination a little bit clearer.

  1. Clone the old repo from github onto a dev machine (which creates a bare repo):

    $ git clone --mirror [email protected]:me/myrepo.git
    
  2. Create a blank repo on the new gitlab.

  3. Add the new repo as a remote on the dev machine.

    $ cd myrepo.git
    $ git remote add newRepo [email protected]:me/myrepo.git
    
  4. Push everything back to the new repo.

    $ git push --mirror newRepo
    

That's it.

This way it copied all branches and tags to the new destination.

You can now remove the cloned bare repo from your dev machine.

Share:
14,395
Bjørn Otto Vasbotten
Author by

Bjørn Otto Vasbotten

Product owner at PSWinCom PSWinCom is a provider of SMS services to businesses and organizations, mainly in Norway and Western Europe, with almost 20 years of experience. PSWinCom SMS Gateway Product page Source code samples on Github PSWinCom Intouch Web based software for sending and receiving SMS PSWinCom SMS Alerts PSWinCom Mobile Dialogue Personal blog mostly about geeky tech stuff :) Url: https://www.vasbotten.net

Updated on June 11, 2022

Comments

  • Bjørn Otto Vasbotten
    Bjørn Otto Vasbotten almost 2 years

    Due to my old installation of Gitlab being too difficult to upgrade (Thread on TKL support forums: http://www.turnkeylinux.org/forum/support/20120913/upgrading-gitlab ), I have downloaded the current TKL Gitlab distro, and followed Gitlabs standard upgrade path so that I now have a fully upgraded Gitlab 6.1 installation running with TKLBAM and all that good stuff. So far so good.

    But, it turns out that our old version of gitlab does not give HTTP urls to repos, so that means that I can't use the "Import existing repository" function in Gitlab 6.1

    I know that i can simply copy the old Git repositories from the old VM to the new one, but how can I make these repositories visible in Gitlab on the new VM?

  • Bjørn Otto Vasbotten
    Bjørn Otto Vasbotten over 10 years
    Will clone give me all branches?
  • ChrisA
    ChrisA over 10 years
    Yes it should. You can check which branches you have after the clone by running git branch -a. If it has missed any, running git fetch --all should retrieve them.
  • Batandwa
    Batandwa about 10 years
    When running that rake task, I get the error: Could not locate Gemfile. What could the issue be? I'm running GitLab 5.0.1
  • slhck
    slhck about 10 years
    @Batandwa Are you sure you're in the directory /home/git/gitlab?
  • big_gie
    big_gie about 10 years
    This fails for me with a fresh install of v6.5.1 on CentOS 6.5... I copy a bare repo to /home/git/repositories/username/repo.git, but the rake tells me "Failed trying to create group username". It then creates an empty repo in /home/git/repositories/root (Administrator's namespace). See github.com/gitlabhq/gitlabhq/issues/3693 and github.com/gitlabhq/gitlabhq/issues/4137
  • Signus
    Signus almost 10 years
    I find this makes it far easier, albeit lengthy, to migrate repositories from GitLab 6.0 to 6.9.2.
  • demaniak
    demaniak almost 8 years
    Ok, this is nifty if you have one repo. But what if you have 50+ repo's, grouped, with 30+ users, with different access rights based on groups/repos? Are you then up THAT creek without a paddle?