记录如何将现有的git reposotory导入到gitlab中.

前言

在使用gitlab之前, 我使用gitolite来保存自己私有的代码. 最近发现gitlab的功能远比gitolite要强大, 使用上也方便很多. 因此考虑放弃gitolite, 而原有在gitolite中的代码就需要迁移过去, 同时希望能保留原有的commit/tag/branch等信息.

导入bare repository

在gitlab服务器端批量导入

发现gitlab对此有特别的支持, 而且支持多个仓库一起导入, 非常方便处理大批仓库的迁移.

假设我们有三个项目,a.git/b.git/c.git在gitolite中, 导入gitlab的操作步骤如下:

打包原有的bare reposotory

cd /home/git/repositories/

tar cvf code.tar a.git b.git c.git

在gitlab中为将要导入的项目做准备

找到gitlab的配置文件gitlab.yml:

sky@sky2:~$ sudo find / -name gitlab.yml

/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

/var/opt/gitlab/gitlab-rails/etc/gitlab.yml

sky@sky2:~$ sudo vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

打开找到下面内容, 主要是看repos_path的内容:

1

2

3

4

5

6## GitLab Shell settings

gitlab_shell:

path: /opt/gitlab/embedded/service/gitlab-shell/

# REPOS_PATH MUST NOT BE A SYMLINK!!!

repos_path: /var/opt/gitlab/git-data/repositories

默认gitlab在/var/opt/gitlab/git-data/repositories/目录下保存各个项目的bare reposotory.

gitlab中对于项目存放的方式有两种:

项目属于某个用户, 比如root/abc.git项目,则保存路径为repositories/root/abc.git

项目属于某个group, 比如group1/cde.git项目, 则保存路径为gitlab-satellites/group1/cde.git

为了管理方便这里我们将为原来的a/b/c三个项目建立一个group, 在gitlab的管理界面上添加一个名为backup的group.

将打包后的文件传到目标机器上

然后解压后放到/var/opt/gitlab/git-data/repositories/backup目录下,路径类似为gitlab-satellites/backup/a.git(同样还有b.git/c.git).

执行命令:

sudo gitlab-rake gitlab:import:repos

成功之后就可以在gitlab的页面上看到新导入的git项目.

用git命令在客户端单个导入

先clone要迁移的仓库, clone的时候用–mirror参数来clone它的bare repository, 然后添加remote:

git clone --mirror git@192.121.166.180:root/ut-cidemo.git

cd ut-cidemo.git

git remote add gitlab git@basiccloud.net:lagency/ut-cidemo.git

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

导入已经clone的代码

如果已经从其他git仓库中clone下来代码, 则可以通过修改remote的方式来导入代码到gitlab项目中.

首先需要在gitlab上新建空项目, 然后:

git remote remove origin

git remote add origin git@basiccloud.net:lagency/ut-training.git

git push -u origin master

注: 如果有多个分支/tag怎么办? 还是上面的方法好用.

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐