Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Migrate repos between instances of Gitlab

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?

like image 704
Bjørn Otto Vasbotten Avatar asked Oct 01 '13 07:10

Bjørn Otto Vasbotten


3 Answers

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.

like image 97
redhot Avatar answered Oct 16 '22 19:10

redhot


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)

like image 44
ChrisA Avatar answered Oct 16 '22 20:10

ChrisA


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.

like image 5
tvw Avatar answered Oct 16 '22 18:10

tvw