目录
第1章版本控制
1.1重点学习
git:分布式版本控制系统
1.2版本控制概念
对软件开发过程中各种程序代码,配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
1.3需要掌握内容
版本控制系统的构建,维护和使用。
1.4版本控制系统的分类
1.4.1本地版本控制
复制整个项目目录保存不同版本(例如加入时间戳以示区别)。
缺点:需要对比每天的不同时非常麻烦。
仅适用于一台电脑。
1.4.2集中化版本控制
主要以SVN为主,占市场30%~40%。
都要有一个单一的集中管理服务器,所有人需要连接这台服务器才可以工作。每天上传新的版本信息(方便回滚到某一版本)。
主要工具:CVS,SVN,Perforce
缺点:脱离SVN,离线状态,SVN服务器故障都无法工作了。
不适用于开源软件。
主要缺点:主要围绕着SVN服务器工作。
1.4.3分布式版本控制系统
主要工具:Git,mercwrial,Bazzaar,Darcs…
客户端不知提取最新版快照,而是把代码仓库完整镜像克隆下来。这样,每台机器都有完整的代码信息,服务器故障也无所谓。
每一台客户端(开发者电脑),都与server端相同。server端数据是最旧的。
第2章Git介绍
2.1官网
https://git-scm.com
帮助手册网址:https://git-scm.com/book/zh/v2
2.2git功能
可以有效管理很小到极大的项目版本。
2.3基于Git的产品
2.3.1GitHub
可以以公开或私有方式存放代码信息等的版本控制平台,web界面(类似于百度网盘),后被微软收购。
2.3.2Gitlab
可以在自己的网络中搭建git服务器(安全)。
2.3.3码云
国内的代码托管平台。
2.4git特点
克隆数据版本:服务器到本机克隆数据库。
提交代码:本机将代码等版本信息提交到服务器。
合并分支:在本机上合并版本分支。
拉取合并分支:在服务器拉取(fetch),然后与自己的主分支合并。
代码冲突解决:解决代码冲突(go语言等方法),然后提交补丁。
第3章Git安装
3.1yum安装
缺点:版本过低
[root@git_server ~]# yum -y install git
[root@git_server ~]# rpm -aq git
3.2源码安装
缺点:慢
Git下载地址:https://github.com/git/git/releases
3.2.1安装依赖关系
如果之前有旧版本需要移除(git --version 查看,yum remove git 移除)
[root@git_server ~]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@git_server ~]# yum -y install perl-ExtUtils-MakeMaker
[root@git_server ~]# yum -y install gcc-c++ autoconf automake libtool
3.2.2编译安装
(后面我改成了最新版本,没有影响)
没有安装包的执行 wget https://github.com/git/git/archive/v2.22.0.tar.gz
[root@git_server tools]# tar xf git-2.22.0.tar.gz -C /usr/src/
[root@git_server tools]# cd /usr/src/git-2.22.0/
[root@git_server git-2.22.0]# make configure
[root@git_server git-2.30.1]# make prefix=/usr/local/git all //编译
[root@git_server git-2.30.1]# make prefix=/usr/local/git install //安装
[root@git_server git-2.30.1]# ln -sf /usr/local/git/bin/git /usr/bin/ //软链接
[root@git_server git-2.30.1]# git --version //查看版本
PS:另一个版本的安装
[root@git_server ~]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@git_server ~]# yum -y install perl-ExtUtils-MakeMaker
[root@git_server tools]# tar xf git-2.22.0.tar.gz -C /usr/src/
[root@git_server tools]# cd /usr/src/git-2.22.0/
[root@git_server git-2.22.0]# make configure
[root@git-server git-2.22.0]# ./configure --prefix=/usr/local/git && make && make install
[root@git_server git-2.30.1]# ln -sf /usr/local/git/bin/git /usr/bin/ //软链接
[root@git_server git-2.30.1]# git --version //查看版本
3.2.3首次进入前设置
[root@git_server ~]# git config --global user.name "hannibal" //使用用户
[root@git_server ~]# git config --global user.email "hannibal1216@126.com" //使用邮箱
[root@git_server ~]# git config --global color.ui true
[root@git_server ~]# git config --list //列出配置
第4章Git使用
4.1初始化git仓库
[root@git-server ~]# mkdir git_data
[root@git-server ~]# cd git_data/
[root@git_server git_data ~]# git init //初始化
4.2添加文件
git add //添加到暂存区
git commit //提交git仓库 -m后面接上注释信息,内容关于本次提交的说明,方便查看
git commit 加入-a后可以取代前两条命令
例:git commit -a -m “2” =git add * && git commit -m “2”
4.3删除文件
没有添加到暂存区的数据直接rm删除即可
已经添加到暂存区的数据使用以下命令:
git rm --cached database删除(不会删除当前工作目录的数据文件)
git rm -f database 将文件数据从git暂存区和工作目录一起删除
这样删除文件123就没有了
4.4改名
[root@git-server git_data]# git add 123
[root@git-server git_data]# git mv 123 456.exe
[root@git-server git_data]# ls
456.exe readme
4.5查看提交历史纪录
[root@git-server git_data]# git log 查看历史提交记录
[root@git-server git_data]# git log 查看最近提交的2条看记录
[root@git-server git_data]# git log -p -1 查看最近1次的差异
4.6还原历史数据
[root@git-server git_data]# git reset --hard bb6f 将readme文件恢复到只有111的时候
4.7还原未来数据
现在已经回到111状态,想撤销还原历史数据回到111,222,可以使用还原未来数据命令。
[root@git-server git_data]# git reflog //查看
[root@git-server git_data]# git reset --hard b627
4.8标签使用
十六进制字符串不好记,所以使用标签的概念(git tag 标签名)
[root@git-server git_data]# touch jeck.txt
[root@git-server git_data]# echo 123 > jeck.txt
[root@git-server git_data]# git commit -a -m “123”
[root@git-server git_data]# git tag v1
[root@git-server git_data]# git status
[root@git-server git_data]#echo 456 >> jeck.txt
[root@git-server git_data]# git commit -a -m “456”
[root@git-server git_data]# git tag v2
[root@git-server git_data]# git log
[root@git-server git_data]# git reset --hard v1
[root@git-server git_data]# ls
4.9数据对比
git diff 标签 //当前文件与上一个版本作比较
4.10 数据备份与恢复
gitlab-rake gitlab:backup:create //备份
gitlab-rake gitlab:backup:restore BACKUP=备份文件编号 //恢复
4.11 作为远程仓库初始化
git --bare init
第5章分支结构
5.1分支结构
初始化仓库后默认是master主分支,但是实际生产环境很少使用主分支的,所以大家都是将代码先合并到dev分支上,然后再合并到master分支。
5.2分支切换
[root@git-server git_data]# git branch dev //创建分支
[root@git-server git_data]# git branch //查看分支
[root@git-server git_data]# git checkout dev //切换到dev分支
[root@git-server git_data]# git branch //查看当前分支
[root@git-server git_data]# touch mua~
[root@git-server git_data]# git add .
[root@git-server git_data]# git commit -a -m "5"
[root@git-server git_data]# git checkout master
[root@git-server git_data]# ls
并没有dev分支上创建的文件,因为还没有合并分支。
5.3合并分支
[root@git-server git_data]# git checkout master
切换到分支 'master'
[root@git-server git_data]# git merge dev //合并分支到主分支
更新 4792a2e..0bf0403
Fast-forward
mua~ | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 mua~
[root@git-server git_data]# ls
查看有了之前在dev分支创建的新文件了。合并分支一般又项目经理负责。
ps:当主分支和dev分支若都修改了相同文件并提交,那么合并分支时就会出现冲突。
5.4删除分支
经过一天,确定已经都把分支合并了,使用命令删除不需要的分支。
[root@git-server git_data]# git branch --no-merged
[root@git-server git_data]# git branch -d dev
已删除分支 dev(曾为 0bf0403)。
[root@git-server git_data]# git branch
* master
第6章Git Windows版
6.1安装
双击一键安装
6.2字符界面操作
字符界面和linux操作相同。
6.3克隆
使用命令git clone root@192.168.9.7:/root/git_data
6.4图形界面
选择克隆(需要填写地址),或者创建仓库都行。
第7章Gitlab服务器部署与应用
7.1简介
Gitlab是一个基于Git实现的Web代码仓库托管软件,可以使用Gitlab搭建一个类似于Github的代码仓库,一般Gitlab私有仓库主要用于公司内部代码管理。
功能:
提交审核
问题追踪
大部分公司会选择 gitlab社区版,cpu两核,内存4G以上。
7.2工作原理
Gitlab和Github的原理其实就是Git的工作原理。
remote:远程仓库 (可以与也可以不与本地仓库同步,远程仓库的内容是最旧的)
repository:本地仓库 (保存了被提交的各个版本的代码)
index:缓存 (git add 提交到此处 不保存文件实体)
worksapce:工作区域 (开发改动代码的地方)
7.3Gitlab组件构成
1)nginx:静态Web服务
2)gitlab-shell:处理git命令和修改authorized keys列表
3)gitlab-workhorse:轻量级反向代理服务器(最敏捷的反向代理,会处理大的http请求,例如文件的上传、下载,其他的请求会反向代理给gitlab rails 应用)
4)logrotate:日志文件管理工具
5)postgresql:数据库(关系型)
6)redis:缓存数据库
7)sidekiq:用于后台执行队列任务
8)unicorn:gitlab rails应用是托管在这个服务器上面的
7.4Gitlab优点
1)git是分布式的,svn不是。svn需要连接服务器,git不用。
2)git和svn分支不同,svn是版本库中的一份copy,git一个仓库是一个快照,切换分支与合并分支更便捷。
3)git有强大的代码仓库管理系统-gitlab。方便管理权限、代码review、创建、管理project。
7.5Gitlab环境部署
7.5.1安装依赖包
[root@gitlab ~]# yum -y install curl openssh-server openssh-clients postfix cronie policycoreutils-python
7.5.2启动postfix,设置开机自启
[root@gitlab ~]# systemctl start postfix
[root@gitlab ~]# systemctl enable postfix
7.5.3下载gitlab的rpm包
[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.11.3-ce.0.el7.x86_64.rpm
7.5.4安装gitlab
[root@gitlab ~]# rpm -ivh gitlab-ce-11.11.3-ce.0.el7.x86_64.rpm
7.5.5修改配置文件
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
13 external_url ‘http://192.168.9.7’
[root@gitlab ~]# gitlab-ctl reconfigure //重新加载配置文件
[root@gitlab ~]# gitlab-ctl restart
[root@gitlab ~]# netstat -lnpt | grep :80
head -1 /opt/gitlab/version-manifest.txt //查看gitlab版本
7.5.6测试使用
访问测试
首次需要设置密码
创建项目
添加说明文件readme
提交
项目就创建好了
7.5.7具体使用
找一台装有git的主机进行连接测试
[root@git ~]# git clone http://192.168.9.7/root/hannibal.git
[root@git ~]# ls
[root@git hannibal]# touch littlecup.txt
[root@git hannibal]# git add *
[root@git hannibal]# git status
[root@git hannibal]# git commit -m "eatman"
[root@git hannibal]# git push http://192.168.9.7/root/hannibal.git
输入用户密码即可
Web界面就可以查看到刚刚客户端提交的数据了。
第8章Github托管服务
8.1简介
Github是一个Git版本库的托管服务,是目前全球最大的软件仓库,它可以托管各种Git版本仓库,还拥有美观的Web界面。可以下载开源软件或者购买付费内容。
8.2Github使用
访问github官网,注册账号。
首先添加一个key(密钥)。
[root@git ~]# ssh-keygen
[root@git ~]# cat .ssh/id_rsa.pub
复制公钥内容,粘贴到网页上。
创建仓库
按着网页上的推荐代码操作一下就可以了。
如果想用别人的就点code,复制url,git cloone就可以了。
[root@git ~]# git clone https://github.com/MaartenBaert/ssr.git
第9章版本控制系统的变更
9.1SVN数据迁移到Gitlab
9.1.1环境
svn服务器,git客户端,gitlab服务器 (svn和git服务器可以部署在一起)
9.1.2安装部署svn
[root@svn ~]# yum -y install subversion
[root@svn ~]# mkdir -p /application/svndata/hannibal //存放项目位置
[root@svn ~]# mkdir -p /application/svnpasswd //存放密码和授权文件
[root@svn ~]# svnadmin create /application/svndata/hannibal/master //创建项目
[root@svn ~]# svnadmin create /application/svndata/hannibal/dev //创建项目
[root@svn ~]# svnadmin create /application/svndata/hannibal/test //创建项目 相当于创建了3个分支
[root@svn ~]# cd /application/svndata/hannibal/master/conf/
[root@svn conf]# cp svnserve.conf svnserve.conf-$(date +%F) //备份
[root@svn conf]# vim svnserve.conf //匿名授权、指定密码文件
[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]# cp svnserve.conf ../../dev/conf/ //将配置文件同样发给dev、test分支
cp:是否覆盖"../../dev/conf/svnserve.conf"? y
[root@svn conf]# cp svnserve.conf ../../test/conf/
cp:是否覆盖"../../test/conf/svnserve.conf"? y
[root@svn conf]# ls /application/svnpasswd/ //svnpasswd下没有东西,都在当前目录下
[root@svn conf]# cp authz passwd /application/svnpasswd/
[root@svn conf]# vim /application/svnpasswd/passwd //修改passwd文件,定义用户
[root@svn conf]# cat /application/svnpasswd/passwd
[users]
manager=123456
dev=123456
hannibal=123
littlecup=123
testgroup = hannibal,littlecup
[root@svn conf]# vim /application/svnpasswd/authz //配置用户权限
在group下面添加分组授权信息
testgroup = hannibal,littlecup
[hannibal/master:/]
manager = rw
dev = r
[hannibal/dev:/]
dev = rw
manager = rw
[hannibal/test:/]
@testgroup = r
manager = rw
[root@svn conf]# cd
[root@svn ~]# svnserve -d -r /application/svndata/ //启动
查看
应该是3690端口
搭建完毕
9.1.3客户端提交代码
使用windows的svn软件,一路下一步安装。
打开软件,右键检出三个分支。在分支里面创建文件,右键提交,就提交到了分支上的项目上了。
9.1.4 git-svn工具克隆svn代码
yum 安装的git是没有git-svn功能的,所以需要使用源码安装的软件包安装才行。
git安装前面有,不再演示。
安装好git后安装git-svn插件
[root@svn git-2.22.0]# yum -y install wget
[root@svn ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@svn ~]# mkdir /backup
[root@svn ~]# cd /backup
[root@svn backup]# git svn clone --no-metadata svn://192.168.9.6/hannibal/master /backup/master/
填写root密码,master用户名,master密码。(两外两个分支操作类似)
[root@svn backup]# git svn clone --no-metadata svn://192.168.9.6/hannibal/dev /backup/dev/
[root@svn backup]# git svn clone --no-metadata svn://192.168.9.6/hannibal/test /backup/test/
[root@svn backup]# tree //查看
目前位置已经把svn代码转换成git版本并保存了。
9.1.5 gitlab安装与创建项目推送代码
gitlab安装不再展示,下面是创建项目推送代码过程。
去到svn-git服务器提交代码到gitlab服务器。
[root@svn ~]# cd /backup/master/
[root@svn master]# git branch
[root@svn master]# git branch linux
[root@svn master]# git checkout linux
[root@svn master]# git branch
[root@svn master]# git add *
[root@svn master]# git commit -m "master"
[root@svn master]# git remote rm origin
[root@svn master]# git remote add origin http://192.168.9.7/root/pro.git
[root@svn master]# git push -u origin linux
查看分支,提交成功。另外两个操作相同。
9.2测试环境数据迁移到Gitlab
9.2.1项目背景
模拟测试环境代码迁移到生产环境,gitlab到gitlab的带啊迁移。保证数据安全稳定,搭建新的公司的gitlab,将自己的gitlab进行数据迁移。
9.2.2Gitlab数据备份
将老服务器Gitlab整体备份,使用一条命令即可。使用命令git-rake gitlab:backup:create,会在/var/opt/gitlab/backups目录生成一个gitlab——backuo.tar的压缩包,有备份日期、版本号作为压缩包前缀。
创建服务配置文件备份
/etc/kgitlab/gtilab.rb //gitlab配置文件
/var/opt/gitlab/nginx/conf //nginx配置文件
/etc/postfix/main.cf //postfix配置文件
9.2.3备份操作
[root@gitlab ~]# cp /etc/gitlab/gitlab.rb{,.bak}
[root@gitlab ~]# cp /var/opt/gitlab/nginx/conf/nginx.conf{,.bak}
[root@gitlab ~]# cp /etc/postfix/main.cf{,.bak}
[root@gitlab ~]# cd /var/opt/gitlab/backups/
[root@gitlab backups]# ls
[root@gitlab backups]# gitlab-rake gitlab:backup:create
9.2.4更改gitlab备份目录
如果想要更换备份文件默认存储路径,执行以下操作。
[root@gitlab ~]# mkdir /backup
[root@gitlab ~]# vim +334 /etc/gitlab/gitlab.rb
[root@gitlab ~]# gitlab-rake gitlab:backup:create
[root@gitlab ~]# cd /backup/
[root@gitlab backup]# gitlab-ctl reconfigure
[root@gitlab backup]# gitlab-rake gitlab:backup:create
[root@gitlab backup]# ls
9.2.5自动备份与过期时间
周期性计划任务,每天凌晨两点进行备份
[root@gitlab ~]# crontab -e
[root@gitlab ~]# crontab -l
0 2 * * * cd /backup && gitlab-rake gitlab:backup:create
设置备份过期时间
[root@gitlab ~]# vim +342 /etc/gitlab/gitlab.rb
[root@gitlab ~]# gitlab-ctl reconfigure
9.2.6上传备份文件到新服务器
[root@gitlab1 ~]# cd /backup/
[root@gitlab1 backup]# ls
1616380250_2021_03_22_11.11.3_gitlab_backup.tar
[root@gitlab1 backup]# scp 1616380250_2021_03_22_11.11.3_gitlab_backup.tar 192.168.9.9:/var/opt/gitlab/backups/
切换到gitlab2上
[root@gitlab2 ~]# cd /var/opt/gitlab/backups/
[root@gitlab2 backups]# ls
[root@gitlab2 backups]# chmod +777 1616380250_2021_03_22_11.11.3_gitlab_backup.tar
[root@gitlab2 backups]# ls -l 1616380250_2021_03_22_11.11.3_gitlab_backup.tar
[root@gitlab2 backups]# gitlab-ctl stop unicorn //停止数据连接服务
[root@gitlab2 backups]# gitlab-ctl stop sidekiq //停止数据连接服务
执行备份恢复命令
[root@gitlab2 backups]# gitlab-rake gitlab:backup:restore BACKUP=1616380250_2021_03_22_11.11.3
[root@gitlab2 backups]# gitlab-ctl start //启动服务
连接测试
有点慢,等一会。
完成