How to copy a Gitlab project to another Gitlab repository?
The fast approach: transit via a mirror
I would clone the original project in a sandbox on your local machine, create the new project where you want it, set your new gitlab location as the remote and push there.
Assuming old_url and new_url are your old and new URLs:
git clone --mirror <old_url>
cd <repo_dir_name>
git remote add new_remote <new_url>
git push --all new_remote
Assuming your new repo was empty when you did this, it will now contain all the branches that exist in the original repo, without any connections to it.
If you also want to push all your tags to the new remote, run this command next:
git push --tags new_remote
Note that you might have to create an empty repo on the new server before you can do the push operations, depending on your new server's configuration.
The slower approach: transit via a regular sandbox
Some people have reported elsewhere that git clone --mirror
doesn't always work as expected. If you're having trouble with the recipe above, you can use a regular sandbox instead:
git clone <old_url>
cd <repo_dir_name>
git remote add new_remote <new_url>
git push --all new_remote
With this approach, that git push --all
will only push your main
branch, because it only pushes all local branches, not all the remote tracking ones.
So, at this point, checkout any branch you also want to transfer to the new remote, and push it to the new remote. This is a somewhat slower process, but it also lets you control exactly what is being migrated, which can have its own value.
Again, you also need to push tags you want to migrate separately, either with all at once with git push --tags new_remote
or one at a time.
Another option is to use Gitlab's export/import feature.
Existing projects running on any GitLab instance or GitLab.com can be exported with all their related data and be moved into a new GitLab instance.
The difference with the other answer is that it also copies the following:
Exported contents
The following items will be exported:
- Project and wiki repositories
- Project uploads
- Project configuration, excluding integrations
- Issues with comments, merge requests with diffs and comments, labels, milestones, snippets, and other project entities
- Design Management files and data
- LFS objects
- Issue boards
- Pipelines history
- Push Rules
So it depends on your use-case if you want to copy just the codes or if you also want to also migrate the other non-code items as listed above. The result would still be 2 separate projects (i.e. It will not appear as a fork).
Take note that:
The GitLab import/export button is displayed if the project import option is enabled.
To export, go to your project's Settings > General page:
Then wait for the email with the downloadable tar.gz. file.
(On my version of Gitlab, if you click the button twice, you can download directly from the browser.)
Then to import, on Gitlab, select the New button > New Project from the top bar.
Then, select Import Project > Gitlab export.
The UI screenshots above may change on future Gitlab versions. Again, make sure to refer to your Gitlab instance's docs pages, or check out the public one from Gitlab EE: Project import/export .
Another option, when you might not have access to the GitLab export project button, is to import directly from an url.