SVN-GitLab數據遷移node
主機名nginx |
IP地址git |
備份程序員 |
特殊要求redis |
SVNsql |
192.168.200.188vim |
SVN服務器安全 |
無服務器 |
Git01app |
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。
2、測試環境GitLab數據遷移到生產環境GitLab
前段時間,在某臺CentOS服務器上搭建了GitLab環境,而且其餘開發組的同仁都陸陸續續把代碼從svn遷移到了GitLab,可是以前的CentOS服務器並非搭建在公司的機房環境,而是搭建在辦公室的某臺閒置的電腦上,所以爲了保證數據安全性,領導要求將以前的GitLab數據所有從新遷移到公司機房的服務器上去。
主機名 |
IP地址 |
備份 |
特殊要求 |
Git01 |
192.168.200.186 |
GitLab服務器01 |
內存2G |
Git02 |
192.168.200.187 |
GitLab服務器02 |
內存2G |
首先,咱們得把老服務器上的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.3是Gitlab的版本號
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
將命令寫成定時任務,天天凌晨兩點執行一次備份操做
設置只保存最近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
在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
第一步:將備份文件權限修改成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
第二步:執行命令中止相關數據鏈接服務
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
第三步:執行命令從備份文件中恢復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便可
第四步:啓動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
兩臺GitLab除了IP和端口不一樣外,項目內容徹底一致