• SVN-GitLab数据迁移


    SVN-GitLab数据迁移

    一、生产环境SVN数据迁移到测试环境GitLab

    主机名

    IP地址

    备份

    特殊要求

    SVN

    192.168.200.188

    SVN服务器

    Git01

    192.168.200.186

    Git客户端

    Git02

    192.168.200.187

    GitLab服务器01

    内存2G

    1.1 Git与SVN对比:优缺点

    1.2 部署SVN服务器

    1.[root@SVN ~]# yum -y install subversion
    2.[root@SVN ~]# mkdir -p /application/svndata/yunjisuan
    3.[root@SVN ~]# mkdir -p /application/svnpasswd
    4.
    5.#创建yunjisuan项目主分支,开发分支,测试分子
    6.[root@SVN ~]# svnadmin create /application/svndata/yunjisuan/master
    7.[root@SVN ~]# svnadmin create /application/svndata/yunjisuan/dev
    8.[root@SVN ~]# svnadmin create /application/svndata/yunjisuan/test
    9.
    10.[root@SVN ~]# cd /application/svndata/yunjisuan/master/conf/
    11.[root@SVN conf]# cp svnserve.conf{,.bak}
    12.[root@SVN conf]# vim svnserve.conf
    13.[root@SVN conf]# sed -n '19p;20p;27p;34p' svnserve.conf
    14.anon-access = none
    15.auth-access = write
    16.password-db = /application/svnpasswd/passwd
    17.authz-db = /application/svnpasswd/authz
    18.
    19.#将配置文件覆盖另外两个分支
    20.[root@SVN conf]# /bin/cp svnserve.conf /application/svndata/yunjisuan/dev/conf/
    21.[root@SVN conf]# /bin/cp svnserve.conf /application/svndata/yunjisuan/test/conf/
    22.[root@SVN conf]# cp /application/svndata/yunjisuan/master/conf/authz /application/svnpasswd/
    23.[root@SVN conf]# cp /application/svndata/yunjisuan/master/conf/passwd /application/svnpasswd/
    24.[root@SVN conf]# cd /application/svnpasswd/
    25.[root@SVN svnpasswd]# vim passwd 
    26.[root@SVN svnpasswd]# tail -4 passwd 
    27.yunjisuan = 123123
    28.benet = 123123
    29.stu001 = 123
    30.stu002 = 456
    31.[root@SVN svnpasswd]# vim authz 
    32.[root@SVN svnpasswd]# egrep -v "#|^$" authz
    33.[aliases]
    34.[groups]
    35.testgroup = stu001,stu002
    36.[yunjisuan/master:/]
    37.yunjisuan = rw          #master主分支代码提交者---开发经理
    38.benet = r
    39.
    40.[yunjisuan/dev:/]
    41.benet = rw              #dev开发分支代码提交者---普通程序员
    42.yunjisuan = r           #dev开发分支代码下载者---开发经理
    43.
    44.[yunjisuan/test:/]
    45.@testgroup = r          #test测试分支代码下载者----测试人员
    46.yunjisuan = rw          #test测试分支代码提交者---开发经理
    47.
    48.[root@SVN svnpasswd]# svnserve -d -r /application/svndata/
    49.[root@SVN svnpasswd]# ps -ef | grep svn
    50.root       1388      1  0 21:59 ?        00:00:00 svnserve -d -r /application/svndata/
    root       1390   1225  0 21:59 pts/0    00:00:00 grep --color=auto svn

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

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

    1.3 利用git-svn克隆svn代码

    特别提示: 
    Yum安装的git没有git-svn功能,要源码安装最新版本

    1.#在Git01上操作
    2.#安装git-svn支持程序(没有这两个包git-svn报错)
    3.[root@Git01 ~]# yum -y install subversion-perl
    4.[root@Git01 backup]# yum -y install perl-Digest-MD5
    5.
    6.#创建Git工作目录并克隆SVN分支代码到本地
    7.[root@Git01 ~]# mkdir -p /backup
    8.[root@Git01 ~]# cd /backup
    9.
    10.#将SVN服务器master分支代码克隆到本地Git工作目录
    11.[root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.188/yunjisuan/master/ /backup/master/
    12.初始化空的 Git 仓库于 /backup/master/.git/
    13.Authentication realm: <svn://192.168.200.188:3690> 072f4de9-e153-4bf7-ba81-3d5e5f12c9f7
    14.Password for 'root':        #输入root登陆密码
    15.Authentication realm: <svn://192.168.200.188:3690> 072f4de9-e153-4bf7-ba81-3d5e5f12c9f7
    16.Username: yunjisuan         #输入svn的master分支的授权账户名
    17.Password for 'yunjisuan':   #输入svn的master分支的授权账户密码
    18.    A   test.txt
    19.r1 = 91d6150e732f2a0191a3609dda47a78592d1406e (refs/remotes/git-svn)
    20.    D   test.txt
    21.    A   testmaster.txt
    22.W: -empty_dir: test.txt
    23.r2 = 67a5085e0fbc4b2d22a9d381e3b6ad076d2eb31e (refs/remotes/git-svn)
    24.Checked out HEAD:
    25.  svn://192.168.200.188/yunjisuan/master r2
    26.
    27.
    28.#将SVN服务器dev分支代码克隆到本地Git工作目录
    29.[root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.188/yunjisuan/dev/ /backup/dev/
    30.初始化空的 Git 仓库于 /backup/dev/.git/
    31.Authentication realm: <svn://192.168.200.188:3690> 9149d004-cc0e-48a9-b8a2-3caa58aa2092
    32.Password for 'root':                    #输入root登陆密码
    33.Authentication realm: <svn://192.168.200.188:3690> 9149d004-cc0e-48a9-b8a2-3caa58aa2092
    34.Username: benet                         #输入svn的dev分支的授权账户名
    35.Password for 'benet':                   #输入svn的dev分支的授权账户密码
    36.    A   test.txt    
    37.r1 = b7e184a3080b3f046969f39dbf18a07c367d37a2 (refs/remotes/git-svn)
    38.    M   test.txt
    39.r2 = 7e33b02be20bc4244086dcd622a18873f7ea93af (refs/remotes/git-svn)
    40.    D   test.txt
    41.    A   testdev.txt
    42.W: -empty_dir: test.txt
    43.r3 = 5a3189eeff8b15228c78858c27dabeda6c417940 (refs/remotes/git-svn)
    44.Checked out HEAD:
    45.  svn://192.168.200.188/yunjisuan/dev r3
    46.
    47.
    48.#将SVN服务器test分支代码克隆到本地Git工作目录
    49.[root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.188/yunjisuan/test/ /backup/test/
    50.初始化空的 Git 仓库于 /backup/test/.git/
    51.Authentication realm: <svn://192.168.200.188:3690> cf8ca014-62dd-4f60-b821-38db9bf1a0d3
    52.Password for 'root':                    #输入root登陆密码
    53.Authentication realm: <svn://192.168.200.188:3690> cf8ca014-62dd-4f60-b821-38db9bf1a0d3
    54.Username: yunjisuan                     #输入svn的test分支的授权账户名
    55.Password for 'yunjisuan':               #输入svn的test分支的授权账户密码
    56.    A   test.txt
    57.r1 = b2d971b3c80708c858dffcdd5a542561b677d93f (refs/remotes/git-svn)
    58.    D   test.txt
    59.    A   testtest.txt
    60.W: -empty_dir: test.txt
    61.r2 = e57f1c1dab5a12df3cda337726bf89382f572135 (refs/remotes/git-svn)
    62.Checked out HEAD:
    63.  svn://192.168.200.188/yunjisuan/test r2
    64.
    65.[root@Git01 backup]# ls
    66.dev  master  test
    67.[root@Git01 backup]# tree
    68..
    69.├── dev
    70.│   └── testdev.txt
    71.├── master
    72.│   └── testmaster.txt
    73.└── test
    74.    └── testtest.txt
    75.
    76.3 directories, 3 files

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

    1.[root@Git01 backup]# ls
    2.dev  master  test
    3.[root@Git01 backup]# cd master/
    4.[root@Git01 master]# ls
    5.testmaster.txt
    6.[root@Git01 master]# git remote add origin http://192.168.200.187:8888/test/demo.git
    7.
    8.#将master目录代码推送到GitLab仓库的Demo项目里
    9.[root@Git01 master]# git push -u origin master
    10.Username for 'http://192.168.200.187:8888': 215379068@qq.com
    11.Password for 'http://215379068@qq.com@192.168.200.187:8888': 
    12.对象计数中: 5, 完成.
    13.压缩对象中: 100% (2/2), 完成.
    14.写入对象中: 100% (5/5), 383 bytes | 0 bytes/s, 完成.
    15.Total 5 (delta 1), reused 0 (delta 0)
    16.To http://192.168.200.187:8888/test/demo.git
    17. * [new branch]      master -> master
    18.分支 master 设置为跟踪来自 origin 的远程分支 master。
    19.
    20.#将dev目录代码推送到GitLab仓库的Demo项目里
    21.[root@Git01 master]# cd /backup/dev
    22.[root@Git01 dev]# git branch
    23.* master
    24.[root@Git01 dev]# git branch dev
    25.[root@Git01 dev]# git checkout dev
    26.切换到分支 'dev'
    27.[root@Git01 dev]# git branch
    28.* dev
    29.  master
    30.[root@Git01 dev]# ls
    31.testdev.txt
    32.[root@Git01 dev]# git add *
    33.[root@Git01 dev]# git commit -m "开发分支代码提交"
    34.
    35.*** Please tell me who you are.
    36.
    37.Run
    38.
    39.  git config --global user.email "you@example.com"
    40.  git config --global user.name "Your Name"
    41.
    42.to set your accounts default identity.
    43.Omit --global to set the identity only in this repository.
    44.
    45.fatal: unable to auto-detect email address (got 'root@Git01.(none)')
    46.[root@Git01 dev]# git config --global user.email "215379068@qq.com"
    47.[root@Git01 dev]# git config --global user.name "Mr.chen"
    48.[root@Git01 dev]# git commit -m "开发分支代码提交"
    49.位于分支 dev
    50.nothing to commit, working tree clean
    51.[root@Git01 dev]# git push -u origin dev
    52.Username for 'http://192.168.200.187:8888': 215379068@qq.com
    53.Password for 'http://215379068@qq.com@192.168.200.187:8888': 
    54.对象计数中: 8, 完成.
    55.压缩对象中: 100% (3/3), 完成.
    56.写入对象中: 100% (8/8), 628 bytes | 0 bytes/s, 完成.
    57.Total 8 (delta 0), reused 0 (delta 0)
    58.remote: 
    59.remote: To create a merge request for dev, visit:
    60.remote:   http://192.168.200.187:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=dev
    61.remote: 
    62.To http://192.168.200.187:8888/test/demo.git
    63. * [new branch]      dev -> dev
    64.分支 dev 设置为跟踪来自 origin 的远程分支 dev。
    65.
    66.
    67.#将test目录代码推送到GitLab仓库的Demo项目里
    68.[root@Git01 dev]# cd /backup/test/
    69.[root@Git01 test]# git branch
    70.* master
    71.[root@Git01 test]# git branch test
    72.[root@Git01 test]# git checkout test
    73.切换到分支 'test'
    74.[root@Git01 test]# git add *
    75.[root@Git01 test]# git config --global user.email "215379068@qq.com"
    76.[root@Git01 test]# git config --global user.name "Mr.chen"
    77.[root@Git01 test]# git commit -m "测试分支代码提交"
    78.位于分支 test
    79.nothing to commit, working tree clean
    80.[root@Git01 test]# git remote add origin http://192.168.200.187:8888/test/demo.git
    81.[root@Git01 test]# git push -u origin test
    82.Username for 'http://192.168.200.187:8888': 215379068@qq.com
    83.Password for 'http://215379068@qq.com@192.168.200.187:8888': 
    84.对象计数中: 5, 完成.
    85.压缩对象中: 100% (2/2), 完成.
    86.写入对象中: 100% (5/5), 379 bytes | 0 bytes/s, 完成.
    87.Total 5 (delta 1), reused 0 (delta 0)
    88.remote: 
    89.remote: To create a merge request for test, visit:
    90.remote:   http://192.168.200.187:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=test
    91.remote: 
    92.To http://192.168.200.187:8888/test/demo.git
    93. * [new branch]      test -> test
    94.分支 test 设置为跟踪来自 origin 的远程分支 test。

    二、测试环境GitLab数据迁移到生产环境GitLab

    2.1 案例背景

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

    主机名

    IP地址

    备份

    特殊要求

    Git01

    192.168.200.186

    GitLab服务器01

    内存2G

    Git02

    192.168.200.187

    GitLab服务器02

    内存2G

    2.2 GitLab的数据备份

    2.2.1 创建备份文件

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

    gitlab-rake gitlab:backup:create

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

    • /etc/gitlab/gitlab.rb配置文件需要备份
    • /var/opt/gitlab/nginx/conf nginx配置文件
    • /etc/postfix/main.cf postfix 邮件配置备份
    1.[root@Git02 backups]# pwd
    2./var/opt/gitlab/backups
    3.[root@Git02 backups]# ls
    4.
    5.#执行命令生成备份压缩包
    6.[root@Git02 backups]# gitlab-rake gitlab:backup:create
    7.
    8.#查看备份包
    9.[root@Git02 backups]# ls
    10.1537370009_2018_09_19_11.2.3_gitlab_backup.tar  1537370260_2018_09_19_11.2.3_gitlab_backup.tar
    11.[root@Git02 backups]# ll
    12.总用量 184
    13.-rw------- 1 git git 92160 9月  19 23:13 1537370009_2018_09_19_11.2.3_gitlab_backup.tar
    14.-rw------- 1 git git 92160 9月  19 23:17 1537370260_2018_09_19_11.2.3_gitlab_backup.tar #最后一次备份

    2.2.2 更改GitLab备份目录

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

    1.[root@Git02 ~]# mkdir -p /backup
    2.#修改如下配置文件
    3.[root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb.bak | sed -n '299p'
    4.   299  # gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
    5.[root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb | sed -n '299p'
    6.   299  gitlab_rails['backup_path'] = "/backup"
    7.
    8.#重载GitLab配置文件
    9.[root@Git02 ~]# gitlab-ctl reconfigure
    10.
    11.#再次进行备份尝试
    12.[root@Git02 ~]# cd /backup/
    13.[root@Git02 backup]# ls
    14.[root@Git02 backup]# gitlab-rake gitlab:backup:create
    15.[root@Git02 backup]# ls
    16.1537371499_2018_09_19_11.2.3_gitlab_backup.tar

    2.2.3 GitLab的自动备份

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

    2.2.4 设置备份过期时间

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

    1.[root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb.bak | sed -n '307p'
    2.   307  # gitlab_rails['backup_keep_time'] = 604800
    3.[root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb | sed -n '307p'
    4.   307  gitlab_rails['backup_keep_time'] = 604800

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

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

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

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

    1.[root@Git02 ~]# cd /backup/
    2.[root@Git02 backup]# ls
    3.1537371499_2018_09_19_11.2.3_gitlab_backup.tar
    4.[root@Git02 backup]# scp 1537371499_2018_09_19_11.2.3_gitlab_backup.tar root@192.168.200.186:/root/
    5.root@192.168.200.186's password: 
    1537371499_2018_09_19_11.2.3_gitlab_backup.tar                    100%   90KB  23.4MB/s   00:00

    2.4 从备份数据中恢复GitLab

    2.4.1 将备份文件权限修改为777

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

    1.#将拷贝过来的备份文件移动到新GitLab的备份目录下
    2.[root@Git01 ~]# mv 1537371499_2018_09_19_11.2.3_gitlab_backup.tar /var/opt/gitlab/backups/
    3.[root@Git01 ~]# cd /var/opt/gitlab/backups/
    4.[root@Git01 backups]# ls
    5.1537371499_2018_09_19_11.2.3_gitlab_backup.tar
    6.
    7.#给备份文件增加777权限
    8.[root@Git01 backups]# chmod 777 1537371499_2018_09_19_11.2.3_gitlab_backup.tar 
    9.[root@Git01 backups]# ll 1537371499_2018_09_19_11.2.3_gitlab_backup.tar 
    10.-rwxrwxrwx 1 root root 92160 9月  20 22:17 1537371499_2018_09_19_11.2.3_gitlab_backup.tar

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

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

    1.#停止相关数据连接服务
    2.[root@Git01 ~]# gitlab-ctl stop unicorn
    3.ok: down: unicorn: 0s, normally up
    4.
    5.[root@Git01 ~]# gitlab-ctl stop sidekiq
    6.ok: down: sidekiq: 0s, normally up

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

    第三步:执行命令从备份文件中恢复GitLab 
    gitlab-rake gitlab:backup:restore BACKUP=备份文件编号

    1.#执行命令恢复数据
    2.[root@Git01 ~]# gitlab-rake gitlab:backup:restore BACKUP=1537371499_2018_09_19_11.2.3
    3.
    4.说明:
    恢复过程中出现两个(yes/no),输入两个yes即可

    2.4.4 重新启动GitLab

    第四步:启动GitLab

    1.[root@Git01 ~]# gitlab-ctl start
    2.ok: run: alertmanager: (pid 30942) 1078s
    3.ok: run: gitaly: (pid 30950) 1077s
    4.ok: run: gitlab-monitor: (pid 30971) 1077s
    5.ok: run: gitlab-workhorse: (pid 30976) 1077s
    6.ok: run: logrotate: (pid 30984) 1076s
    7.ok: run: nginx: (pid 30991) 1076s
    8.ok: run: node-exporter: (pid 30996) 1075s
    9.ok: run: postgres-exporter: (pid 31075) 1075s
    10.ok: run: postgresql: (pid 31084) 1074s
    11.ok: run: prometheus: (pid 31093) 1074s
    12.ok: run: redis: (pid 31102) 1073s
    13.ok: run: redis-exporter: (pid 31106) 1073s
    14.ok: run: sidekiq: (pid 32321) 1s
    ok: run: unicorn: (pid 32328) 0s

    2.4.5 进行Web访问检查

    两台GitLab除了IP和端口不同外,项目内容完全一致

     

  • 相关阅读:
    ubuntu 进入临时客户会话页面 转入用户自己页面
    python hmac 加密
    docker 学习
    python try except 捕捉错误得到错误的时候的值
    python2 python3 m2crypto 安装(rsa 私钥文件加密)
    python3 requests 模块 json参数和data参数区别
    爬虫-鸡哥给大家的福利
    常用模块2
    python入门到放弃之 面向对象vs面向过程
    python放弃之 模块和包
  • 原文地址:https://www.cnblogs.com/heroke/p/10303213.html
Copyright © 2020-2023  润新知