Import an existing git project into GitLab?

GitGitlab

Git Problem Overview


I have an account of a Gitlab installation where I created the repository "ffki-startseite"

Now I want to clone the repository git://freifunk.in-kiel.de/ffki-startseite.git into that repository with all commits and branches, so I can start working on it in my own scope.

How can I import it?

Git Solutions


Solution 1 - Git

I was able to fully export my project along with all commits, branches and tags to gitlab via following commands run locally on my computer:

>To illustrate my example, I will be using https://github.com/raveren/kint as the source repository that I want to import into gitlab. I created an empty project named Kint (under namespace raveren) in gitlab beforehand and it told me the http git url of the newly created project there is http://gitlab.example.com/raveren/kint.git > >The commands are OS agnostic.

In a new directory:

git clone --mirror https://github.com/raveren/kint
cd kint.git
git remote add gitlab http://gitlab.example.com/raveren/kint.git
git push gitlab --mirror

Now if you have a locally cloned repository that you want to keep using with the new remote, just run the following commands* there:

git remote remove origin
git remote add origin http://gitlab.example.com/raveren/kint.git
git fetch --all

*This assumes that you did not rename your remote master from origin, otherwise, change the first two lines to reflect it.

Solution 2 - Git

Add the new gitlab remote to your existing repository and push:

git remote add gitlab url-to-gitlab-repo
git push gitlab master

Solution 3 - Git

To keep ALL TAGS AND BRANCHES

Just simply run this command in an existing Git repository

cd existing_repo
git remote rename origin previous-hosts
git remote add gitlab [email protected]:hutber/kindred.com.git
git push -u gitlab --all
git push -u gitlab --tags

Solution 4 - Git

This is a basic move one repo to new location. I use this sequence all te time. With --bare no source files will be seen.

Open Git Bash.
Create a bare clone of the repository.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push to the new repository.

cd old-repository.git

git push --mirror https://gitlab.com/exampleuser/new-repository.git

Remove the temporary local repository you created in step 1.

cd ../
rm -rf old-repository.git

Why mirror? See documentation of git: https://git-scm.com/docs/git-push > --all Push all branches (i.e. refs under refs/heads/); cannot be used with other . > > --mirror Instead of naming each ref to push, specifies that all refs under refs/ (which includes but is not limited to refs/heads/, > refs/remotes/, and refs/tags/) be mirrored to the remote repository. > Newly created local refs will be pushed to the remote end, locally > updated refs will be force updated on the remote end, and deleted refs > will be removed from the remote end. This is the default if the > configuration option remote..mirror is set.

Solution 5 - Git

Here are the steps provided by the Gitlab:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.example.com/rmishra/demoapp.git
git push -u origin --all
git push -u origin --tags

Solution 6 - Git

rake gitlab:import:repos might be a more suitable method for mass importing:

  • copy the bare repository under repos_path (/home/git/repositories/group/repo.git). Directory name must end in .git and be under a group or user namespace.
  • run bundle exec rake gitlab:import:repos

The owner will the first admin, and a group will get created if not already existent.

See also: https://stackoverflow.com/questions/18214363/how-to-import-an-existing-bare-git-repository-into-gitlab

Solution 7 - Git

You create an empty project in gitlab then on your local terminal follow one of these:

Push an existing folder

cd existing_folder
git init
git remote add origin git@gitlab.com:GITLABUSERNAME/YOURGITPROJECTNAME.git
git add .
git commit -m "Initial commit"
git push -u origin master

Push an existing Git repository

cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.com:GITLABUSERNAME/YOURGITPROJECTNAME.git
git push -u origin --all
git push -u origin --tags

Solution 8 - Git

git clone --mirror [email protected]:username/repo-name.git

git remote add gitlab ssh://[email protected]/username/repo.git

git push -f --tags gitlab refs/heads/*:refs/heads/*

It is better to do it over ssh, the https might won't work

Solution 9 - Git

Gitlab is a little bit bugged on this feature. You can lose a lot of time doing troubleshooting specially if your project is any big.

The best solution would be using the create/import tool, do not forget put your user name and password, otherwise it won't import anything at all.

Follow my screenshots

enter image description here

Solution 10 - Git

Moving a project from GitHub to GitLab including issues, pull requests Wiki, Milestones, Labels, Release notes and comments

There is a thorough instruction on GitLab Docs:

https://docs.gitlab.com/ee/user/project/import/github.html

tl;dr
  • Ensure that any GitHub users who you want to map to GitLab users have either:

  • A GitLab account that has logged in using the GitHub icon - or -

  • A GitLab account with an email address that matches the public email address of the GitHub user

  • From the top navigation bar, click + and select New project.

  • Select the Import project tab and then select GitHub.

  • Select the first button to List your GitHub repositories. You are redirected to a page on github.com to authorize the GitLab application.

  • Click Authorize gitlabhq. You are redirected back to GitLab's Import page and all of your GitHub repositories are listed.

  • Continue on to selecting which repositories to import.

But Please read the GitLab Docs page for details and hooks!

(it's not much)

Solution 11 - Git

I found the best and simplest method here, works like a charm for me, it will push all the tags and branches from origin to the new remote:

git remote add newremote git@git-cloud.z.com:test/kubespray.git

git push newremote --tags refs/remotes/origin/*:refs/heads/*

I used 'git push --all -u newremote', but it only push the checkouted branches to the newremote.

> Git: Push All Branches to a New Remote > > by Keith Dechant , Software Architect > > Here's a scenario some of you might have encountered with your Git > repositories. You have a working copy of a Git repo, say from an old > server. But you only have the working copy, and the origin is not > accessible. So you can't just fork it. But you want to push the whole > repo and all the branch history to your new remote. > > This is possible if your working copy contains the tracking branches > from the old remote (origin/branch1, origin/branch1, etc.). If you do, > you have the entire repo and history. > > However, in my case there were dozens of branches, and some or all of > them I had never checked out locally. Pushing them all seemed like a > heavy lift. So, how to proceed? > > I identified two options: > > Option 1: Checkout every branch and push I could do this, and I could > even write a Bash script to help. However, doing this would change my > working files with each checkout, and would create a local branch for > each of the remote tracking branches. This would be slow with a large > repo. > > Option 2: Push without changing your working copy There is a second > alternative, which doesn't require a checkout of each branch, doesn't > create extraneous branches in the working copy, and doesn't even > modify the files in the working copy. > > If your old, no-longer-active remote is called "oldremote" and your > new remote is called "newremote", you can push just the remote > tracking branches with this command: > > git push newremote refs/remotes/oldremote/*:refs/heads/* > > In some > cases, it's also possible to push just a subset of the branches. If > the branch names are namespaced with a slash (e.g., > oldremote/features/branch3, oldremote/features/branch4, etc.), you can > push only the remote tracking branches with names beginning with > "oldremote/features": > > git push newremote refs/remotes/oldremote/features/*:refs/heads/features/* > > Whether you > push all the branches or just some of them, Git will perform the > entire operation without creating any new local branches, and without > making changes to your working files. Every tracking branch that > matches your pattern will be pushed to the new remote. > > For more information on the topic, check out this thread on Stack > Overflow. > > Date posted: October 9, 2017

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionrubo77View Question on Stackoverflow
Solution 1 - GitraverenView Answer on Stackoverflow
Solution 2 - Gituser425495View Answer on Stackoverflow
Solution 3 - GitJamie HutberView Answer on Stackoverflow
Solution 4 - GitMartijn van WezelView Answer on Stackoverflow
Solution 5 - GitRajkaran MishraView Answer on Stackoverflow
Solution 6 - GitCiro Santilli Путлер Капут 六四事View Answer on Stackoverflow
Solution 7 - GitRichard TorcatoView Answer on Stackoverflow
Solution 8 - GitkazermView Answer on Stackoverflow
Solution 9 - GitJBarros35View Answer on Stackoverflow
Solution 10 - Gitrubo77View Answer on Stackoverflow
Solution 11 - GittomView Answer on Stackoverflow