连接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg
提取码:fytm
复制这段内容后打开百度网盘手机App,操做更方便哦node
主机名 | IP地址 | 备份 | 特殊要求 |
---|---|---|---|
Git01 | 192.168.200.52 | Git客户端 | 无 |
Git02 | 192.168.200.53 | GitLab服务器01 | 内存2G |
SVN | 192.168.200.57 | SVN服务器 | 无 |
公司近期对于"版本管理工具是否进行切换SVN-->Git"的问题进行了讨论,因而对svn和git进行了相关研究,进而梳理出了Git的特色(优,缺点),最后将Git与SVN进行了对比,对比结果详细见下方内容。nginx
[root@SVN ~]# yum -y install subversion [root@SVN ~]# rpm -qa subversion subversion-1.7.14-14.el7.x86_64 [root@SVN ~]# mkdir -p /application/svndata/yunjisuan [root@SVN ~]# mkdir -p /application/svnpasswd [root@SVN ~]# tree /application /application ├── svndata │ └── yunjisuan └── svnpasswd 3 directories, 0 files
#建立yunjisuan项目主分支,开发分支,测试分子 [root@SVN ~]# svnadmin create /application/svndata/yunjisuan/master [root@SVN ~]# svnadmin create /application/svndata/yunjisuan/dev [root@SVN ~]# svnadmin create /application/svndata/yunjisuan/test [root@SVN ~]# cd /application/svndata/yunjisuan/master/conf/ [root@SVN conf]# ls authz passwd svnserve.conf [root@SVN conf]# cp svnserve.conf{,.bak} [root@SVN conf]# sed -n '19p;20p;27p;34p' svnserve.conf anon-access = none auth-access = write password-db = /application/svnpasswd/passwd authz-db = /application/svnpasswd/authz
#将配置文件覆盖另外两个分支 [root@SVN conf]# /bin/cp svnserve.conf /application/svndata/yunjisuan/dev/conf/ [root@SVN conf]# /bin/cp svnserve.conf /application/svndata/yunjisuan/test/conf/ [root@SVN conf]# cp /application/svndata/yunjisuan/master/conf/authz /application/svnpasswd/ [root@SVN conf]# cp /application/svndata/yunjisuan/master/conf/passwd /application/svnpasswd/ [root@SVN conf]# cd /application/svnpasswd/ [root@SVN svnpasswd]# ls authz passwd [root@SVN svnpasswd]# vim passwd [root@SVN svnpasswd]# tail -4 passwd yunjisuan = 123123 benet = 123123 stu001 = 123 stu002 = 456 [root@SVN svnpasswd]# vim authz [root@SVN svnpasswd]# egrep -v "#|^$" authz [aliases] [groups] testgroup = stu001,stu002 [yunjisuan/master:/] #master主分支代码提交者---开发经理 yunjisuan = rw benet = r [yunjisuan/dev:/] benet = rw #dev开发分支代码提交者---普通程序员 yunjisuan = r #dev开发分支代码下载者---开发经理 [yunjisuan/test:/] @testgroup = r #test测试分支代码下载者----测试人员 yunjisuan = rw #test测试分支代码提交者---开发经理 [root@SVN svnpasswd]# svnserve -d -r /application/svndata/ [root@SVN svnpasswd]# ps -ef | grep svn root 10649 1 0 09:08 ? 00:00:00 svnserve -d -r /application/svndata/ root 10651 10566 0 09:08 pts/0 00:00:00 grep --color=auto svn
在宿主机建立三个svn目录checkout代码,以下图git
随便在三个目录上传点代码文件程序员
特别提示: Yum安装的git没有git-svn功能,要源码安装最新版本web
#在Git01上操做 #安装git-svn支持程序(没有这两个包git-svn报错) [root@Git01 ~]# yum -y install subversion-perl perl-Digest-MD5 [root@Git01 ~]# rpm -qa subversion-perl perl-Digest-MD5 subversion-perl-1.7.14-14.el7.x86_64 perl-Digest-MD5-2.52-3.el7.x86_64 #建立Git工做目录并克隆SVN分支代码到本地 [root@Git01 ~]# mkdir -p /backup [root@Git01 ~]# cd /backup #将SVN服务器master分支代码克隆到本地Git工做目录 [root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.57/yunjisuan/master/ /backup/master/ 初始化空的 Git 仓库于 /backup/master/.git/ Authentication realm: <svn://192.168.200.57:3690> 123e5da4-f346-4cb1-af1c-8511a1b9d2ce Password for 'root': 111111 #输入root登录密码 Authentication realm: <svn://192.168.200.57:3690> 123e5da4-f346-4cb1-af1c-8511a1b9d2ce Username: yunjisuan #输入svn的master分支的受权帐户名 Password for 'yunjisuan': 123123 #输入svn的master分支的受权帐户密码 A master测试文件.txt r1 = c45d2c0a60369c2703f6791f74c88cafe127ae1b (refs/remotes/git-svn) Checked out HEAD: svn://192.168.200.57/yunjisuan/master r1 [root@Git01 backup]# ls master [root@Git01 backup]# cd master/ [root@Git01 master]# ls master测试文件.txt [root@Git01 master]# cat master测试文件.txt welcome to yunjisuan
#将SVN服务器dev分支代码克隆到本地Git工做目录 [root@Git01 master]# git svn clone --no-metadata svn://192.168.200.57/yunjisuan/dev/ /backup/dev/ 初始化空的 Git 仓库于 /backup/dev/.git/ Authentication realm: <svn://192.168.200.57:3690> 6ab3b7d8-6315-4c00-bca9-b53840a155ae Password for 'root': 111111 #输入root登录密码 Authentication realm: <svn://192.168.200.57:3690> 6ab3b7d8-6315-4c00-bca9-b53840a155ae Username: benet #输入svn的dev分支的受权帐户名 Password for 'benet': 123123 #输入svn的dev分支的受权帐户密码 A dev测试文件 .txt r1 = 1d061e53f74e53a6a2170138e7446328b38b8159 (refs/remotes/git-svn) Checked out HEAD: svn://192.168.200.57/yunjisuan/dev r1 [root@Git01 backup]# ls dev master [root@Git01 backup]# cd dev/ [root@Git01 dev]# ls dev测试文件 .txt [root@Git01 dev]# cat dev测试文件\ .txt welcome to yunjisuan
#将SVN服务器test分支代码克隆到本地Git工做目录 [root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.57/yunjisuan/test/ /backup/test/ 初始化空的 Git 仓库于 /backup/test/.git/ Authentication realm: <svn://192.168.200.57:3690> afe84583-3f5a-405b-a345-34e530f9c9e3 Password for 'root': 111111 #输入root登录密码 Authentication realm: <svn://192.168.200.57:3690> afe84583-3f5a-405b-a345-34e530f9c9e3 Username: yunjisuan #输入svn的test分支的受权帐户名 Password for 'yunjisuan': 123123 #输入svn的test分支的受权帐户密码 A test测试文件 .txt r1 = 3b6d1e30144fbc8989191bebf7c74042c8939132 (refs/remotes/git-svn) Checked out HEAD: svn://192.168.200.57/yunjisuan/test r1 [root@Git01 backup]# ls dev master test [root@Git01 backup]# cd test/ [root@Git01 test]# ls test测试文件 .txt [root@Git01 test]# cat test测试文件\ .txt welcome to yunjisuan
[root@Git01 backup]# ls dev master test [root@Git01 backup]# tree . ├── dev │ └── dev\346\265\213\350\257\225\346\226\207\344\273\266\ .txt ├── master │ └── master\346\265\213\350\257\225\346\226\207\344\273\266.txt └── test └── test\346\265\213\350\257\225\346\226\207\344\273\266\ .txt 3 directories, 3 files
在GitLab上建立一个组,在组里添加3个成员(主程序员,开发者,报告者)
GitLab默认状况下,master分支是受到保护的(只能主程序员推送和合并)redis
- 主程序员=产品经理:推送和合并受保护分支
- 开发者=开发人员:推送不受保护分支
- 报告者=测试人员:只能clone代码
在GitLab这个组里建立一个项目叫作Demo
经过主程序员帐号将从SVN克隆下来的master分支,dev分支,test分支的代码推送到Demo项目里。分支名称不变
[root@Git01 backup]# ls dev master test [root@Git01 backup]# cd master/ [root@Git01 master]# ls master测试文件.txt [root@Git01 master]# git remote add origin http://192.168.200.53:8888/test/demo.git
#将master目录代码推送到GitLab仓库的Demo项目里 [root@Git01 master]# git push -u origin master Username for 'http://192.168.200.53:8888': root Password for 'http://root@192.168.200.53:8888': 对象计数中: 3, 完成. Delta compression using up to 2 threads. 压缩对象中: 100% (2/2), 完成. 写入对象中: 100% (3/3), 253 bytes | 0 bytes/s, 完成. Total 3 (delta 0), reused 0 (delta 0) To http://192.168.200.53:8888/test/demo.git * [new branch] master -> master 分支 master 设置为跟踪来自 origin 的远程分支 master。
#将dev目录代码推送到GitLab仓库的Demo项目里 [root@Git01 master]# cd /backup/dev [root@Git01 dev]# git remote add origin http://192.168.200.53:8888/test/demo.git [root@Git01 dev]# git branch * master [root@Git01 dev]# git branch dev [root@Git01 dev]# git checkout dev 切换到分支 'dev' [root@Git01 dev]# git branch * dev master [root@Git01 dev]# ls dev测试文件 .txt [root@Git01 dev]# git add * [root@Git01 dev]# git commit -m "开发分支代码提交" 位于分支 dev nothing to commit, working tree clean [root@Git01 dev]# git push -u origin dev Username for 'http://192.168.200.53:8888': root Password for 'http://root@192.168.200.53:8888': 对象计数中: 3, 完成. 写入对象中: 100% (3/3), 244 bytes | 0 bytes/s, 完成. Total 3 (delta 0), reused 0 (delta 0) remote: remote: To create a merge request for dev, visit: remote: http://192.168.200.53:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=dev remote: To http://192.168.200.53:8888/test/demo.git * [new branch] dev -> dev 分支 dev 设置为跟踪来自 origin 的远程分支 dev。
#将test目录代码推送到GitLab仓库的Demo项目里 [root@Git01 dev]# cd /backup/test/ [root@Git01 test]# git remote add origin http://192.168.200.53:8888/test/demo.git [root@Git01 test]# git branch * master [root@Git01 test]# git branch test [root@Git01 test]# git checkout test 切换到分支 'test' [root@Git01 test]# git branch master * test [root@Git01 test]# git add * nothing to commit, working tree clean [root@Git01 test]# git config --global user.email "1773464408@qq.com" [root@Git01 test]# git config --global user.name "Mr.yang" [root@Git01 test]# git commit -m "测试分支代码提交" 位于分支 test nothing to commit, working tree clean [root@Git01 test]# git push -u origin test Username for 'http://192.168.200.53:8888': root Password for 'http://root@192.168.200.53:8888': 对象计数中: 3, 完成. 写入对象中: 100% (3/3), 252 bytes | 0 bytes/s, 完成. Total 3 (delta 0), reused 0 (delta 0) remote: remote: To create a merge request for test, visit: remote: http://192.168.200.53:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=test remote: To http://192.168.200.53:8888/test/demo.git * [new branch] test -> test 分支 test 设置为跟踪来自 origin 的远程分支 test。
前段时间,在某台CentOS服务器上搭建了GitLab环境,而且其余开发组的同仁都陆陆续续把代码从svn迁移到了GitLab,可是以前的CentOS服务器并非搭建在公司的机房环境,而是搭建在办公室的某台闲置的电脑上,所以为了保证数据安全性,领导要求将以前的GitLab数据所有从新迁移到公司机房的服务器上去。sql
主机名 | IP地址 | 备份 | 特殊要求 |
---|---|---|---|
Git01 | 192.168.200.52 | GitLab服务器01 | 内存2G |
Git02 | 192.168.200.53 | GitLab服务器02 | 内存2G |
首先,咱们得把老服务器上的Gitlab总体备份,使用Gitlab一键安装包安装Gitlab很是简单,一样的备份恢复与迁移也很是简单。使用一条命令便可建立完整的Gitlab备份。vim
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.3是Gitlab的版本号服务器
- /etc/gitlab/gitlab.rb配置文件须要备份
- /var/opt/gitlab/nginx/conf nginx配置文件
- /etc/postfix/main.cf postfix 邮件配置备份
[root@Git02 ~]# cd /var/opt/gitlab/backups [root@Git02 backups]# ls #执行命令生成备份压缩包 [root@Git02 backups]# gitlab-rake gitlab:backup:create #如下省略。。。 #查看备份包 [root@Git02 backups]# ls 1540035121_2018_10_20_11.2.3_gitlab_backup.tar [root@Git02 backups]# ll 总用量 92 -rw------- 1 git git 92160 10月 20 19:32 1540035121_2018_10_20_11.2.3_gitlab_backup.tar
GitLab配置文件路径:/etc/gitlab/gitlab.rb
[root@Git02 ~]# mkdir -p /backup #修改以下配置文件 [root@Git02 backup]# vim /etc/gitlab/gitlab.rb [root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb | sed -n '299p' 299 gitlab_rails['backup_path'] = "/backup" #重载GitLab配置文件 [root@Git02 ~]# gitlab-ctl reconfigure #再次进行备份尝试 [root@Git02 ~]# cd /backup/ [root@Git02 backup]# ls [root@Git02 backup]# gitlab-rake gitlab:backup:create #如下省略。。。 [root@Git02 backup]# ls 1540036570_2018_10_20_11.2.3_gitlab_backup.tar
将命令写成定时任务,天天凌晨两点执行一次备份操做
设置只保存最近7天的备份,编辑/etc/gitlab/gitlab.rb配置文件,找到以下配置并修改
[root@Git02 backup]# vim /etc/gitlab/gitlab.rb [root@Git02 backup]# cat -n /etc/gitlab/gitlab.rb | sed -n '307p' 307 gitlab_rails['backup_keep_time'] = 604800 [root@Git02 backup]# gitlab-ctl reconfigure
在G01上和G02上都部署同版本的GitLab服务器
[root@Git02 backup]# cd /backup/ [root@Git02 backup]# ls 1540036570_2018_10_20_11.2.3_gitlab_backup.tar [root@Git02 backup]# scp 1540036570_2018_10_20_11.2.3_gitlab_backup.tar root@192.168.200.52:/root/ root@192.168.200.52's password: 111111 1540036570_2018_10_20_11.2.3_gitlab_backup.tar 100% 90KB 1.0MB/s 00:00
第一步:将备份文件权限修改成777,否则可能恢复的时候会出现权限不够,不能解压的问题。
#将拷贝过来的备份文件移动到新GitLab的备份目录下 [root@Git01 ~]# mv 1540036570_2018_10_20_11.2.3_gitlab_backup.tar /var/opt/gitlab/backups/ [root@Git01 ~]# cd /var/opt/gitlab/backups/ [root@Git01 backups]# ls 1540036570_2018_10_20_11.2.3_gitlab_backup.tar #给备份文件增长777权限 [root@Git01 backups]# chmod 777 1540036570_2018_10_20_11.2.3_gitlab_backup.tar [root@Git01 backups]# ll 1540036570_2018_10_20_11.2.3_gitlab_backup.tar -rwxrwxrwx 1 root root 92160 10月 20 20:03 1540036570_2018_10_20_11.2.3_gitlab_backup.tar
第二步:执行命令中止相关数据链接服务
#中止相关数据链接服务 [root@Git01 ~]# gitlab-ctl stop unicorn ok: down: unicorn: 3s, normally up [root@Git01 ~]# gitlab-ctl stop sidekiq ok: down: sidekiq: 0s, normally up
第三步:执行命令从备份文件中恢复GitLab
gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
#执行命令恢复数据 [root@Git01 ~]# gitlab-rake gitlab:backup:restore BACKUP=1540036570_2018_10_20_11.2.3 说明:恢复过程当中出现两个(yes/no),输入两个yes便可
第四步:启动GitLab
[root@Git01 ~]# gitlab-ctl start ok: run: alertmanager: (pid 2758) 9649s ok: run: gitaly: (pid 1129) 10493s ok: run: gitlab-monitor: (pid 1144) 10489s ok: run: gitlab-workhorse: (pid 1122) 10495s ok: run: logrotate: (pid 10709) 3252s ok: run: nginx: (pid 1124) 10495s ok: run: node-exporter: (pid 1138) 10492s ok: run: postgres-exporter: (pid 1143) 10489s ok: run: postgresql: (pid 1113) 10496s ok: run: prometheus: (pid 1151) 10487s ok: run: redis: (pid 1108) 10496s ok: run: redis-exporter: (pid 1160) 10479s ok: run: sidekiq: (pid 13190) 1s ok: run: unicorn: (pid 13197) 0s
最终咱们发现,两台GitLab除了IP和端口不一样外,项目内容彻底一致