导入已有仓库
记录如何将现有的git reposotory导入到gitlab中.
前言
在使用 gitlab 之前, 我使用 gitolite 来保存自己私有的代码. 后来发现 gitlab 的功能远比 gitolite 要强大, 使用上也方便很多. 因此考虑放弃 gitolite, 而原有在 gitolite 中的代码就需要迁移过去, 同时希望能保留原有的 commit/tag/branch 等信息.
批量导入
发现 gitlab 对此有特别的支持, 而且支持多个仓库一起导入, 非常方便处理大批仓库的迁移.
假设我们有三个项目,a.git/b.git/c.git在gitolite中,我们准备将他们导入gitlab,放在名为backup的group中。则导入操作步骤如下:
打包原有的bare reposotory
注意一定要是bare reposotory。
可以直接到git仓库的原始存储路径下打包,如:
cd /home/git/repositories/ tar cvf code.tar a.git b.git c.git
也可以通过带
--bare
参数的git clone命令来获取:git clone --bare ××/a.git
在gitlab中为将要导入的项目做准备
在gitlab的管理界面上添加一个名为backup的group.
将打包后的文件传到目标机器上
准备导入的目录结构
# import目录下存放所有要导入的仓库,放在哪里无所谓 mkdir /home/sky/import/ # 建立子目录,对应要导入的group名 mkdir /home/sky/import/backup # 将要导入的git仓库复制到子目录下 cp -R a.git b.git c.git /home/sky/import/backup # 将整个import目录的owner和group都修改为git sudo chown -R git:git /home/sky/import/
执行导入命令
# 注意这里的路径只到import路径,不要写子路径,子路径是用来制定group的 sudo gitlab-rake gitlab:import:repos['/home/sky/import/']
命令执行输出类似如下:
Processing /home/sky/import/backup/a.git * Using namespace: backup * Created a (backup/a-service)
成功之后就可以在gitlab的页面上看到新导入的git项目.
单个导入
先clone要迁移的仓库, clone的时候用--mirror参数来clone它的bare repository, 然后添加remote:
git clone --mirror [email protected]:root/ut-cidemo.git
cd ut-cidemo.git
git remote add gitlab [email protected]:lagency/ut-cidemo.git
git push -f --tags gitlab refs/heads/*:refs/heads/*
这个方式适合导入单个仓库。
导入非bare仓库
当git clone仓库没有使用--mirror参数,也可以通过类似的方式导入。
cd existing_repo
# 将原来的origin重命名
git remote rename origin old-origin
# 添加新的remote到我们要提交的仓库,请在导入前先建立好对应的group和空project
# 可以用http提交,但是要输入密码
# git remote add origin http://server.skyao.io:8800/backup/a.git
# 用ssh提交就可以不用输入密码,比较方便
git remote add origin [email protected]:backup/a.git
# push资料上去
git push -u origin --all
git push -u origin --tags