SVN-->GitLab-->GitLab数据迁移

项目案例一:生产环境SVN数据迁移到测试环境GitLab

主机名 IP地址 备份 特殊要求
SVN 192.168.200.70 SVN服务器
Git01 192.168.200.107 Git客户端 内存2G
Git02 192.168.200.108 GitLab服务器 内存2G

SVN-->GitLab-->GitLab数据迁移

 

案例背景

公司近期对于"版本管理工具是否进行切换SVN-->Git"的问题进行了讨论,于是对svn和git进行了相关研究,进而梳理出了Git的特点(优,缺点),最后将Git与SVN进行了对比,对比结果详细见下方内容。

SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移

 

部署SVN服务器

yum -y install subversion

mkdir -p /application/svndata/yunjisuan

mkdir -p /application/svnpasswd

SVN-->GitLab-->GitLab数据迁移

 

创建yunjisuan项目主分支,开发分支,测试分支

svnadmin create /application/svndata/yunjisuan/master

svnadmin create /application/svndata/yunjisuan/dev

svnadmin create /application/svndata/yunjisuan/test

cd /application/svndata/yunjisuan/master/conf/

cp svnserve.conf{,.bak}

vim svnserve.conf

sed -n '19p;20p;27p;34p' svnserve.conf

 
  1. anon-access = none
  2. auth-access = write
  3. password-db = /application/svnpasswd/passwd
  4. authz-db = /application/svnpasswd/authz

SVN-->GitLab-->GitLab数据迁移

 

将配置文件覆盖另外两个分支

/bin/cp svnserve.conf /application/svndata/yunjisuan/dev/conf/

/bin/cp svnserve.conf /application/svndata/yunjisuan/test/conf/

cp /application/svndata/yunjisuan/master/conf/authz /application/svnpasswd/

cp /application/svndata/yunjisuan/master/conf/passwd /application/svnpasswd/

cd /application/svnpasswd/

vim passwd

tail -4 passwd

 
  1. yunjisuan = 123123
  2. benet = 123123
  3. stu001 = 123
  4. stu002 = 456

vim authz

egrep -v "#|^$" authz

 
  1. [aliases]
  2. [groups]
  3. testgroup = stu001,stu002
  4. [yunjisuan/master:/]
  5. yunjisuan = rw #master主分支代码提交者---开发经理
  6. benet = r
  7. [yunjisuan/dev:/]
  8. benet = rw #dev开发分支代码提交者---普通程序员
  9. yunjisuan = r #dev开发分支代码下载者---开发经理
  10. [yunjisuan/test:/]
  11. @testgroup = r #test测试分支代码下载者----测试人员
  12. yunjisuan = rw #test测试分支代码提交者---开发经理

svnserve -d -r /application/svndata/

ps -ef | grep svn

SVN-->GitLab-->GitLab数据迁移

 

使用svn客户端(windows版)

下载链接 
链接:https://pan.baidu.com/s/1dKq_JVJN3tFxY_AvMKKTcA 
提取码:kn9z

 

svn客户端软件安装

一路yes即可

 

在宿主机创建三个svn目录checkout代码,如下图

SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移

随便在三个目录上传点代码文件

 

GitLab软件包下载

链接:https://pan.baidu.com/s/1TYJnh6M01MAVhLRXr-qfLw 
提取码:mqxp

 

在Git01和02上都安装GitLab

ls

yum localinstall gitlab-ce-11.2.3-ce.0.el7.x86_64.rpm -y

yum localinstall -y --->代表利用yum安装本地指定的rpm包,好处是自动解决依赖问题

SVN-->GitLab-->GitLab数据迁移

 

初始化GitLab,只需要执行一次

gitlab-ctl reconfigure

SVN-->GitLab-->GitLab数据迁移

 

查看gitlab启动状态

gitlab-ctl status

SVN-->GitLab-->GitLab数据迁移

 

在宿主机输入网址进行就可以访问了

http://192.168.200.107

登陆管理员账号:root,密码:linyaonie

SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移

 

GitLab中文社区版补丁包安装

ls

tar xf gitlab-11-2-stable-zh.tar.gz

SVN-->GitLab-->GitLab数据迁移

 

查看系统已经安装的GitLab版本号

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

SVN-->GitLab-->GitLab数据迁移

 

查看解压后的补丁版本号

cat gitlab-11-2-stable-zh/VERSION

特别提示:补丁包版本号和安装的GitLab版本号需要一致

SVN-->GitLab-->GitLab数据迁移

 

备份英文版GitLab

cp -r /opt/gitlab/embedded/service/gitlab-rails{,.bak}

SVN-->GitLab-->GitLab数据迁移

 

将中文补丁包的内容覆盖英文版

ls

/bin/cp -rf gitlab-11-2-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/

特别提示:报错不需要管,因为已经设置过root密码,登陆过,所以会报错

SVN-->GitLab-->GitLab数据迁移

 

重新配置GitLab

gitlab-ctl reconfigure

gitlab-ctl restart

SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移

 

重新刷新浏览器访问GitLab

http://192.168.200.107/

SVN-->GitLab-->GitLab数据迁移

 

修改GitLab配置文件/etc/gitlab/gitlab.rb

我们需要修改GitLab的默认域名(因为我们是在内网搭建的GitLab) 
GitLab默认的监听端口为80,但是在企业中,这个端口经常被别的服务占用,所以我们还需要更换端口号

cp /etc/gitlab/gitlab.rb{,.bak}

vim /etc/gitlab/gitlab.rb

cat -n /etc/gitlab/gitlab.rb | sed -n '13p;943p'

 
  1. 13 external_url 'http://192.168.200.107:8888'
  2. 943 nginx['listen_port'] = 8888

SVN-->GitLab-->GitLab数据迁移

 

重新配置GitLab

gitlab-ctl reconfigure

SVN-->GitLab-->GitLab数据迁移

 

重新启动GitLab

gitlab-ctl restart

SVN-->GitLab-->GitLab数据迁移

 

重新访问浏览器

http://192.168.200.107:8888

 

利用git-svn克隆svn代码

 

特别提示

Yum安装的git没有git-svn功能,要源码安装最新版本

 

在Git01上操作

安装git-svn支持程序(没有这两个包git-svn报错)

yum -y install subversion-perl perl-Digest-MD5

SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移

 

Git软件包下载链接

链接:https://pan.baidu.com/s/1CHZpkPlGRDuA0nPGqMYJcg 
提取码:cjj6

 

Git01上源码包安装Git

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

rpm -qa curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

ls

tar xf git-2.9.5.tar.gz -C /usr/src

cd /usr/src/git-2.9.5

./configure --prefix=/usr/local/git

make && make install

ln -sf /usr/local/git/bin/* /usr/bin

which git

SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移

 

创建Git工作目录并克隆SVN分支代码到本地

mkdir -p /backup

cd /backup

SVN-->GitLab-->GitLab数据迁移

 

将SVN服务器master分支代码克隆到本地Git工作目录

git svn clone --no-metadata svn://192.168.200.70/yunjisuan/master/ /backup/master/

 
  1. 初始化空的 Git 仓库于 /backup/master/.git/
  2. Authentication realm: <svn://192.168.200.70:3690> 072f4de9-e153-4bf7-ba81-3d5e5f12c9f7
  3. Password for 'root': #输入root登陆密码
  4. Authentication realm: <svn://192.168.200.70:3690> 072f4de9-e153-4bf7-ba81-3d5e5f12c9f7
  5. Username: yunjisuan #输入svn的master分支的授权账户名
  6. Password for 'yunjisuan': #输入svn的master分支的授权账户密码
  7. A testmaster.txt
  8. r1 = 2d14ff71cd66adc7ab59579e1df091d942341d15 (refs/remotes/git-svn)
  9. Checked out HEAD:
  10. svn://192.168.200.70/yunjisuan/master r1

SVN-->GitLab-->GitLab数据迁移

 

将SVN服务器dev分支代码克隆到本地Git工作目录

git svn clone --no-metadata svn://192.168.200.70/yunjisuan/dev/ /backup/dev/

 
  1. 初始化空的 Git 仓库于 /backup/dev/.git/
  2. Authentication realm: <svn://192.168.200.70:3690> 9149d004-cc0e-48a9-b8a2-3caa58aa2092
  3. Password for 'root': #输入root登陆密码
  4. Authentication realm: <svn://192.168.200.70:3690> 9149d004-cc0e-48a9-b8a2-3caa58aa2092
  5. Username: benet #输入svn的dev分支的授权账户名
  6. Password for 'benet': #输入svn的dev分支的授权账户密码
  7. A testdev.txt
  8. r1 = 29ce1125dcb4e7edd5d7b7765efed357864da6b9 (refs/remotes/git-svn)
  9. D testdev.txt
  10. W: -empty_dir: testdev.txt
  11. r2 = 28513bd8b7caf7add694384f776d4438e89df595 (refs/remotes/git-svn)
  12. W: +empty_dir: testdev
  13. r3 = 4c81bad5817f0d8e1cd8bcde6d6f870d6ef75b82 (refs/remotes/git-svn)
  14. A testdev.txt
  15. r4 = 444d8fe3775f14b22a48650b38331f1541f2b47d (refs/remotes/git-svn)
  16. D testdev
  17. W: -empty_dir: testdev
  18. r5 = f61851f06712ee8519112eb8335e59e4d14e05cf (refs/remotes/git-svn)
  19. Checked out HEAD:
  20. svn://192.168.200.70/yunjisuan/dev r5

SVN-->GitLab-->GitLab数据迁移

 

将SVN服务器test分支代码克隆到本地Git工作目录

git svn clone --no-metadata svn://192.168.200.70/yunjisuan/test/ /backup/test/

 
  1. 初始化空的 Git 仓库于 /backup/test/.git/
  2. Authentication realm: <svn://192.168.200.70:3690> cf8ca014-62dd-4f60-b821-38db9bf1a0d3
  3. Password for 'root': #输入root登陆密码
  4. Authentication realm: <svn://192.168.200.70:3690> cf8ca014-62dd-4f60-b821-38db9bf1a0d3
  5. Username: yunjisuan #输入svn的test分支的授权账户名
  6. Password for 'yunjisuan': #输入svn的test分支的授权账户密码
  7. A testtest.txt
  8. r1 = 7b428e68cc3bd68c1ddfa12ebe146f0c4881394b (refs/remotes/git-svn)
  9. Checked out HEAD:
  10. svn://192.168.200.70/yunjisuan/test r1

SVN-->GitLab-->GitLab数据迁移


ls

tree

 
  1. ├── dev
  2. │ └── testdev.txt
  3. ├── master
  4. │ └── testmaster.txt
  5. └── test
  6. └── testtest.txt

SVN-->GitLab-->GitLab数据迁移

 

创建组及组权限问题

 
  1. 在GitLab上创建一个组,在组里添加3个成员(主程序员,开发者,报告者)
  2. GitLab默认情况下,master分支是受到保护的(只能主程序员推送和合并)
  3. 主程序员=产品经理:推送和合并受保护分支
  4. 开发者=开发人员:推送不受保护分支
  5. 报告者=测试人员:只能clone代码
  6. 通过主程序员账号将从SVN克隆下来的master分支,dev分支,test分支的代码推送到Demo项目里。分支名称不变

SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


在GitLab这个组里创建一个项目叫做demo

SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移


SVN-->GitLab-->GitLab数据迁移

图片说明SVN-->GitLab-->GitLab数据迁移

 

克隆代码远程仓库到本地

ls

cd master/

ls

git remote add origin http://192.168.200.107:8888/test/demo.git

ls -a

SVN-->GitLab-->GitLab数据迁移

 

将master目录代码推送到GitLab仓库的Demo项目里

git push -u origin master

 
  1. Username for 'http://192.168.200.107:8888': master
  2. Password for 'http://215379068@qq.com@192.168.200.187:8888':
  3. 对象计数中: 5, 完成.
  4. 压缩对象中: 100% (2/2), 完成.
  5. 写入对象中: 100% (5/5), 383 bytes | 0 bytes/s, 完成.
  6. Total 5 (delta 1), reused 0 (delta 0)
  7. To http://192.168.200.187:8888/test/demo.git
  8. * [new branch] master -> master
  9. 分支 master 设置为跟踪来自 origin 的远程分支 master。

SVN-->GitLab-->GitLab数据迁移

 

将dev目录代码推送到GitLab仓库的Demo项目里

cd ../dev

git branch

git branch dev

git checkout dev

git branch

ls

git add *

git commit -m "开发分支代码提交"

 
  1. 34.
  2. 35.*** Please tell me who you are.
  3. 36.
  4. 37.Run
  5. 38.
  6. 39. git config --global user.email "you@example.com"
  7. 40. git config --global user.name "Your Name"
  8. 41.
  9. 42.to set your accounts default identity.
  10. 43.Omit --global to set the identity only in this repository.
  11. 44.
  12. 45.fatal: unable to auto-detect email address (got 'root@Git01.(none)')

git config --global user.email "1123400300@qq.com"

git config --global user.name "Mr.sun"

git commit -m "开发分支代码提交"

 
  1. 位于分支 dev
  2. nothing to commit, working tree clean
 
  1. Username for 'http://192.168.200.187:8888': 1123400300@qq.com
  2. Password for 'http://215379068@qq.com@192.168.200.187:8888':
  3. 对象计数中: 8, 完成.
  4. 压缩对象中: 100% (3/3), 完成.
  5. 写入对象中: 100% (8/8), 628 bytes | 0 bytes/s, 完成.
  6. Total 8 (delta 0), reused 0 (delta 0)
  7. remote:
  8. remote: To create a merge request for dev, visit:
  9. remote: http://192.168.200.187:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=dev
  10. remote:
  11. To http://192.168.200.187:8888/test/demo.git
  12. * [new branch] dev -> dev
  13. 分支 dev 设置为跟踪来自 origin 的远程分支 dev。

SVN-->GitLab-->GitLab数据迁移


git remote add origin http://192.168.200.107:8888/test/demo.git

git push -u origin dev

SVN-->GitLab-->GitLab数据迁移

 

将test目录代码推送到GitLab仓库的Demo项目里

cd ../test

git branch

git branch test

git checkout test

git add *

git config --global user.email "1123400300@qq.com"

git config --global user.name "Mr.sun"

git commit -m "测试分支代码提交"

 
  1. 位于分支 test
  2. nothing to commit, working tree clean

git remote add origin http://192.168.200.107:8888/test/demo.git

git push -u origin test

 
  1. Username for 'http://192.168.200.187:8888': 215379068@qq.com
  2. Password for 'http://215379068@qq.com@192.168.200.187:8888':
  3. 对象计数中: 5, 完成.
  4. 压缩对象中: 100% (2/2), 完成.
  5. 写入对象中: 100% (5/5), 379 bytes | 0 bytes/s, 完成.
  6. Total 5 (delta 1), reused 0 (delta 0)
  7. remote:
  8. remote: To create a merge request for test, visit:
  9. remote: http://192.168.200.187:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=test
  10. remote:
  11. To http://192.168.200.187:8888/test/demo.git
  12. * [new branch] test -> test
  13. 分支 test 设置为跟踪来自 origin 的远程分支 test。

SVN-->GitLab-->GitLab数据迁移

 

查浏览器查看上传代码结果

SVN-->GitLab-->GitLab数据迁移

 

项目案例二:测试环境GitLab数据迁移到生产环境GitLab

 

案例背景

前段时间,在某台CentOS服务器上搭建了GitLab环境,并且其他开发组的同仁都陆陆续续把代码从svn迁移到了GitLab,但是之前的CentOS服务器并不是搭建在公司的机房环境,而是搭建在办公室的某台闲置的电脑上,因此为了保证数据安全性,领导要求将之前的GitLab数据全部重新迁移到公司机房的服务器上去。

主机名 IP地址 备份
Git01 192.168.200.107 GitLab服务器01
Git02 192.168.200.108 GitLab服务器02
 

GitLab的数据备份

 

在Git01上创建备份文件

首先,我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单,同样的备份恢复与迁移也非常简单。使用一条命令即可创建完整的Gitlab备份。

gitlab-rake gitlab:backup:create

使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1546812061_2019_01_07_11.2.3_gitlab_backup.tar的压缩包,这个压缩包就是Gitlab整个的完整部分,其中开头1546812061_2019_01_07是备份创建的日期,11.2.3是Gitlab的版本号

/etc/gitlab/gitlab.rb配置文件需要备份 
/var/opt/gitlab/nginx/conf nginx配置文件 
/etc/postfix/main.cf postfix 邮件配置备份

SVN-->GitLab-->GitLab数据迁移


cd /var/opt/gitlab/backups

ls

SVN-->GitLab-->GitLab数据迁移

 

执行命令生成备份压缩包

gitlab-rake gitlab:backup:create

SVN-->GitLab-->GitLab数据迁移

 

查看备份包

ll

SVN-->GitLab-->GitLab数据迁移

 

6.2.2 更改Gitlab备份目录

GitLab配置文件路径:/etc/gitlab/gitlab.rb

mkdir -p /gitlab-backup

SVN-->GitLab-->GitLab数据迁移

 

修改如下配置文件

cat -n /etc/gitlab/gitlab.rb.bak | sed -n '299p'

 
  1. 299 # gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

vim /etc/gitlab/gitlab.rb

cat -n /etc/gitlab/gitlab.rb | sed -n '299p'

 
  1. 299 gitlab_rails['backup_path'] = "/gitlab-backup"

SVN-->GitLab-->GitLab数据迁移

 

重载GitLab配置文件

gitlab-ctl reconfigure

SVN-->GitLab-->GitLab数据迁移

 

再次进行备份尝试

cd /gitlab--backup/

ls

gitlab-rake gitlab:backup:create

ls

SVN-->GitLab-->GitLab数据迁移

 

GitLab的自动备份

将命令写成定时任务,每天凌晨两点执行一次备份操作

 

设置备份过期时间

设置只保存最近7天的备份,编辑/etc/gitlab/gitlab.rb配置文件,找到如下配置并修改

cat -n /etc/gitlab/gitlab.rb.bak | sed -n '307p'

 
  1. 307 # gitlab_rails['backup_keep_time'] = 604800

cat -n /etc/gitlab/gitlab.rb | sed -n '307p'

 
  1. 307 gitlab_rails['backup_keep_time'] = 604800

SVN-->GitLab-->GitLab数据迁移

 

copy老服务器上面的备份文件到新服务器

确保新GitLab服务器和老GitLab服务器版本相同

在G01上和G02上都部署同版本的GitLab服务器

 

copy老服务器上面的备份文件到新服务器

cd /gitlab-backup/

ls

scp 1546813129_2019_01_07_11.2.3_gitlab_backup.tar 192.168.200.108:/root/

SVN-->GitLab-->GitLab数据迁移

 

在Git02服务器上从备份数据中恢复GitLab

 

将备份文件权限修改为777

第一步:将备份文件权限修改为777,不然可能恢复的时候会出现权限不够,不能解压的问题。

 

将拷贝过来的备份文件移动到新GitLab的备份目录下

ls

mv 1546813129_2019_01_07_11.2.3_gitlab_backup.tar /var/opt/gitlab/backups/

cd /var/opt/gitlab/backups/

ls

SVN-->GitLab-->GitLab数据迁移

 

给备份文件增加777权限

ls

chmod 777 1546813129_2019_01_07_11.2.3_gitlab_backup.tar

ll 1546813129_2019_01_07_11.2.3_gitlab_backup.tar

SVN-->GitLab-->GitLab数据迁移

 

执行命令停止相关数据连接服务

第二步:执行命令停止相关数据连接服务

 

停止相关数据连接服务

gitlab-ctl stop unicorn

gitlab-ctl stop sidekiq

SVN-->GitLab-->GitLab数据迁移

 

执行命令从备份文件中恢复GitLab

第三步:执行命令从备份文件中恢复GitLab

gitlab-rake gitlab:backup:restore BACKUP=备份文件编号

 

执行命令恢复数据

ls

gitlab-rake gitlab:backup:restore BACKUP=1546813129_2019_01_07_11.2.3

 
  1. 说明:
  2. 恢复过程中出现两个(yes/no),输入两个yes即可

SVN-->GitLab-->GitLab数据迁移

 

重新启动GitLab

第四步:启动GitLab

gitlab-ctl start

SVN-->GitLab-->GitLab数据迁移

 

进行Web访问检查

http://192.168.200.107:8888

http://192.168.200.108

SVN-->GitLab-->GitLab数据迁移

最终我们发现,两台GitLab除了IP和端口不同外,项目内容完全一致

原文链接地址:https://www.cnblogs.com/linyaonie/p/11238309.html

上一篇:Windows中使用SVN


下一篇:SVN设置强制注释才能提交