Git版本管理及代码上线
Posted shell520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git版本管理及代码上线相关的知识,希望对你有一定的参考价值。
1.1 有了git版本管理后怎么样
1、自动生成备份
2、随时回滚
3、知道改动的地方
说明:简单来讲,有新和旧的来对比,回滚高亮检查多个版本,并且能检查出来有多少个东西是修改过的.
1.2 介绍常见版本管理软件
1.2.1 SVN
1.2.2 Git
1.2.3 使用Git的好处
1、没有网络依然可以使用Git同步数据
2、SVN非常强烈要依赖网络,Git没网也可以用。
1.3 github与gitlab的区分
github是网上公用的仓库,但是公开的如需保密要交费,所以缺点就是这些,但gitlab是本地仓库,有保护不收费,搭建方便。
1.4 安装Git环境准备
cat /etc/redhat-release #查看系统版本,只要是7就没有问题
uname –r #查看系统内核
getenforce #查看防火墙关闭没有
systemctl disable firewalld #如果没有关闭就立即关闭。
vim /etc/selinux/config #修改end为disabled
1.5 安装Git
rpm –qa git #查看有没有git,一般系统会自带
yum install –y git #如果没有就yum安装
1.6 Git全局配置
git config --global user.name “你的名字” #例如fxs,不能为中文
git config --global user.email “你的邮箱” #邮箱地址
git config --global color.ui true #语法高亮
git config --list #查看全局配置
说明:记得config后面是两个--,不是一个,否则会报错。
1.7 初始化GIT工作目录
mkdir git_data
cd git_data/
git init #初始化,后面会显示初始化一个git隐藏目录,在刚创建的那个目录下的.git目录
git status #查看工作区状态,会显示主要的分支,现在还没有东西等信息。
1.8 常规使用(创建数据-提交数据)
touch README #创建一个文件
git status #查看git状态,此时红色的,因没添加到缓存区。
git add README #提交数据到暂存区域,暂存区域是给你检查错误的缓存区,如果有错可撤销。
git status #上面git add提交到缓存区后,文件会被绿色。
git commit –m ‘firstcommit’ #提交暂存文件至版本库,为你每次提交写一个说明,如不写说明,不知每次提交是什么东西就乱了,方便查历史记录
1.8.1 提交过程小总结
先提交到缓存区域,然后在git commit一次性将缓存区域的东西提交到数据库。
1.9 删除暂存区数据
1、没有添加到暂存区的数据直接rm删除即可
2、已经添加到暂存区数据:
git rm –cached 要删的文件名 #这个是将文件从Git暂存区域列表删除,(并不会删除当前工作目录内的数据文件)
git rm –f 要删的文件名 #将文件数据从Git暂存区和工作目录一起删除
1.10 重命名暂存区数据
1、没有添加到暂存区的数据直接move改名即可
2、已经添加到暂存区数据:
git mv 要改的文件名 改成什么文件名
1.11 查看历史记录
git log #查看历史记录,每次提交的用户名称、账号、数据提交时间、以及提交说明都会有。
git commit –a –m “xx test” #-a是add的意思,-m是写说明信息,不写的话,使用log命令查看不到,这个命令可一次性提交数据到缓存区和写说明
测试的话:
1、 创建一个文件或目录,空目录不行,需目录里创文件
2、 并且可使用一次性完成添加到暂存区和写说明。
1.12 git commit参数说明
添加新文件
git add #添加到暂存区域
git commit #提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看
修改或删除原有文件
常规方法
git add *
git commit
简便方法
git commit –a –m “注释信息”
-a 表示直接提交
1.13 查看历史记录
git log #查看提交历史记录
git log -2 #查看前二条
git log –p -1 #显示每次提交的内容差异,相当于最近的文件改变信息
git log –stat -2 #stat简要显示数据增该行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息
git log –pretty=oneline #pretty根据不同的格式展示提交的历史信息(根据版本号与后面注释查找我们需要的文件)
git log –pretty=fuller -2 #以更详细的模式输出提交的历史记录(更详细的显示前两行,谁提交、提交时间、注释内容)
git log –pretty=fomat:“%h %cn” #查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名 ,其他格式见备注(类似AWK切割内容,指定想要看的内容,显得方便,参数有固定语法)
1.14 还原历史数据
说明:当你觉得版本后问题,你可以反悔,可以返回指定历史记录的版本,head相当于一个软连接,你指向哪个版本,用户看到head就是你指向的哪个版本。
git reset --hard HEAD^ #还原历史提交版本上一次
git reset --hard HEAD~5 #这里可指定前几个的数量,不然用~的方式去数的话比较麻烦,所以这个方式会好一些。
git reset --hard 3de15d4 #找到历史记录还原点的版本,号码可不写全,可写版本的前几个数,例如版本为asdasd21321,可指定为asdasd2也可指定。
1.15 还原未来数据(当还原历史记录反悔后的操作)
说明:当我还原历史记录后,前面的历史记录会全部没有,并且文件也没有了,所以一般人觉得不可以后悔和恢复数据,所以这里还涉及一个命令,可以返回之前所有的数据再重新head软连接指向
git reflog #查看未来历史更新点
git reset –hard 版本号前几个号码 #使用hard指向那时候的版本,再使用ls或git log –pretty=oneline查看现在所有缓存区的东西与工作目录下的当时的内容了。
1.16 标签使用
说明:前面回滚使用的是一串字符串,有长又难记,每一个版本使用一个标签来方便回滚和查找,下次可快速查找到对应标签的版本,但是使用标签的时候,他默认只对现在当前使用的版本来指定标签。
git tag V1.0 #当前提交内容打一个标签(方便快速回滚)每次提交都可以打个tag
git tag #查看当前所有的标签
git show v1.0 #查看当前1.0版本的详细信息
git tag v1.2 –m “version 1.2 release is test” #创建带有说明的标签,-a指定标签名字,-m指定说明文字
指定当前版本后,新建标签名字和标签注释
git reset –hard 版本号
git reset –hard V1.0
1.17 对比数据
说明:git diif可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改后,再把它提交到仓库就放心多了。
git diff 文件名 #指定查看对比的文件
举例:
echo oldboy >>README
git diff README
说明:追加点信息到README文件里,在使用diff查看这个文件,会看到绿色,绿色是新增的内容。
1.18 分子管理
1.18.1 分支原理与原理图
说明:当刚创建Git的时候,会有个master的主分支字样,但其实git还有主分支与分支的作用,主分支是是必须要非常稳定的,子分支就是在实际的项目开发中是给开发用的,开发为一个部门,部门为一个dev子分支,在这个dev子分支下,分为划分了好几个分支,每个开发主要负责一个功能开发来提交到属于自己的分支,这样就不会造成多个人去写一份配置文件造成冲突,有过多的麻烦,所以每个人都有分工和分支来解决代码冲突,写完后再统一发到部门dev的分支,再确认代码没问题就提交到主分支发放给任何一个用户,所以分支是团队合作的分支管理。
1.18.2 创建分支
git branch linux #创建分支
git checkout linux #切换分支
git branch #查看当前分支情况,当前分支前有*号
说明:创建分支后,会将master分支里的文件克隆一份到linux分支里,当你在linux分支里修改文件时,其实跟master是两条管道了,他的东西你修改不了,你修改的东西只能在linux下修改了,开发人员在linux分支里修改东西和创建东西,是无法在master里创建的,相当于git也有权限管理。
1.18.3 模拟开发在自家分支修改文件时,master无修改(举例)
开发操作:
[[email protected] git_data]# git branch #当前在linux分支
* linux
master
[[email protected] git_data]# echo "this is test" >>11 #我追加点信息到一个文件里
[[email protected] git_data]# git commit -a -m "this is test" #提交到缓存区,并且写上文件提交的注释
linux运维管理人员操作:
[[email protected] git_data]# git checkout master #管理人员切换到master主分支
Switched to branch ‘master‘
[[email protected] git_data]# cat 11 #打开开发人员在自家分支里修改的11文件,并没有修改,是空的,说明没有真正修改文件。
[[email protected] git_data]# git log -1 #查看最新的第一条日志历史记录,发现不是我们刚才提交的注释那条信息,说明确实没有。
commit eb77741ee3142b37f37002524f0812851a9627fb
Author: “fxs” <“[email protected]”>
Date: Fri Aug 17 21:27:46 2018 +0800
ceshi.test
1.18.4 合并分支(将linux分支的工作成果合并到master分支)
[[email protected] git_data]# git branch #查看现在在哪个分支,必须得切换到master分支下在合并
linux
* master
[[email protected] git_data]# git merge linux #使用merge命令合并linux分支,将指定分支合并到当前master分支
Updating eb77741..c3eb6fe
Fast-forward
11 | 1 + #有新增内容
1 file changed, 1 insertion(+)
[[email protected] git_data]# cat 11 #在查看在开发修改的文件里的信息,确定有新内容了。
this is test
[[email protected] git_data]# git log -1 #查看最新的历史记录,也能看到刚才开发提交的那个注释信息,已经同步过来了。
commit c3eb6fe004849d0e5c4e4d06d5c3ffcf20576ac9
Author: “fxs” <“[email protected]”>
Date: Sat Aug 18 12:45:18 2018 +0800
this is test
1.18.5 子分支在工作当中的规范(习惯)
说明:当将开发人员写好东西的分支合并到master后,就要立刻删除分支,当然也可以继续用,但是根据生产环境而言可能开发是一周或者一个月更新一次代码,开发忘记自己的分支在哪里了,不然容易混淆乱,常年下去分支会特别多,新来接手的开发就不知道哪个能用哪个是能删哪个是能动的,因为每个分支修改后的代码只会保存在自己的分支里,当master更新后的代码在那个旧的分支是不会有变化的,所以新来的开发来接手更改就不知道哪个是最近版本更新的,所以每一次更新代码就重新开一个分支,开一个分支相当于克隆master最新代码到新的分支里,非常快,能接着编辑,这是一个习惯、工作规范。
git branch –d linux #删除linux分支
1.18.6 手动合并分支
master分支内容与linux子分支内容冲突案例:
master 分支也是单独一个仓库,linux 分支也是单独的一个仓库,当master与linux分支提交到自己单独的仓库缓存区时不会报错,但使用git merge linux合并linux到master仓库时,就会出现某某文件内容冲突,因为内容一样导致合并失败、需要人工修改文件来进行划分需要哪些内容,当我们打开冲突的文件时,git系统会帮忙划分master分支与linux分支修改的内容划界限来帮忙区分哪部分是谁写的,哪部分是master自带的,让我们人工手动修改
出现这个后,如果不要master分支的内容,就把HEAD那一行,与linux与等号、mastert内容去掉,留下linux的,这样就是人工合并。
1.19 windows客户端使用
说明:前面讲的都是linux客户端,在讲讲windows客户端使用,安装Git-2.10.0-64-bit
windows的git,本质是windows上的linux系统
下载地址:https://git-scm.com/download/win 根据自己系统多少位来下载,安装过程全靠默认Next
步骤1
右键可使用命令行模式,也可使用win下的GUI图形化模式,命令模式也是使用git等命令创建,使用GUI模式先创建仓库,提交等等这些操作。
步骤2
创建工作目录
说明:随后在工作目录写上东西,在点击Rescan重新扫描, ,就可以了,随后等操作可百度,这些不常用,只是方便,了解下。
1.20 安装GitLab服务器
说明:GitHub是一个网络平台,可上传代码,员工从这里下载,但是内容公开的,如果要保密要交费,所以也可以在服务器上搭建Git代码仓库,但是比较麻烦一些,GitHub每年好像交7美元。
说明:内存需要2个G,他运行一些东西需要大点的空间。
curl -LJO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.9.8-ce.0.el7.x86_64.rpm #官网下载或从百度下载再拉到服务器,因为慢。
yum localinstall -y gitlab-ce-8.9.8-ce.0.el7.x86_64.rpm #解决本地rpm包的依赖问题
gitlab-ctl reconfigure #初始化,就执行一次。
gitlab-ctl status #查看gitlab状态
通过浏览器访问并设置初始密码:
10.0.0.7
通过浏览器访问页面,设置初始化密码
密码:12345678 #要求8位,少就不行。
git登陆界面:
账号:root 密码:12345678
浏览器操作
创建新的项目
填写项目名称、项目描述、权限设置,Private是登陆的用户才能查看,internal是必须登陆的用户才能克隆,public是能被所有人克隆,克隆是能访问的意思,能访问说明能直接复制。
创建项目
提示使用ssh密钥登陆(否则开发push代码时每一次都需要提供账号密码,在开发机器上使用ssh-keygen -t rsa生成密钥后,将根目录下的pub公钥所有复制到上面授权开发用户就好。)
可用这个地址登陆,这个oldboyedu-47是系统主机名,如果win没有host解析是登陆不上去的,所以现在直接用IP访问。
开发可直接输入网址可登陆,因为刚保存了我们登陆的cookies会话,用无痕窗口登陆就需要输入账号密码,因为刚设置的是私有仓库,共有的就不用登陆。
服务器内操作:
[[email protected] tools]# ssh-keygen #生成一个密钥对,简称公钥,安装全部回车。
[[email protected] tools]# cat /root/.ssh/id_rsa.pub #打开密钥文件,复制里面的内容。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMQKObsjIuKLu5tx104wYs/0t1qQXHGscgwXrCRi14Dn4PT564hhe6pp21CkelzCaB1mPoRCKheyL70d5cPW1hg+qpsJr9REh2lLDeG/tpfV4b/y3ekqMZxLwQl7bcG9z1V1C95PMs4GYd/Es6BdlG1/F7XDy/ZAjV+R/VVcNygNFZKf0H6Dg9w+GMzVEcSw5TpRImfW90R9+cShgeU6nfKXGbjDaA4FdoI/L0iV5m6dl4jcs1sGwn6FuKDouKVTLM9t1Y4O5Cc2eulhai+C5i+2hHoH4A+AdGMAjXeRKBUsoz0Gmvz/+WtGR7I5mFosfs7emWL8FElBwpOHnkS8Lr [email protected]
点击警告标志进入页面
将公钥内容放置里面,填写名称,名称可随意填,有描述性就好。
点击头顶标志,再点击刚创建项目的名字。
网页上有专门的操作教程,可查看使用,第一个是创建新的存储库,第二个是在现有文件夹操作的命令,(第一种情况是从开发电脑没有文件夹的情况下去操作的命令,第二种情况是开发有这个文件夹的目录再执行的命令。)
服务器操作:
[[email protected] /]# git clone [email protected]:root/oldboyedu47.git #执行这条命令,输入yes,会在/目录克隆创建一个项目名称的目录,想在哪个目录生成这个工作目录,就切换到哪个目录再克隆生成,这个其实像共享目录似得,想要在本地同步一下这个工作目录,必须要输入账号密码,但使用了ssh密钥分发,就登录不用账号和密码了。(开发用户操作)
[[email protected] /]# cd oldboyedu47/ #进入克隆好的工作目录
[[email protected] oldboyedu47]# touch 123test #创建一个文件
[[email protected] oldboyedu47]# git add 123test #将文件添加到暂存区
[[email protected] oldboyedu47]# git commit -m "123 git-test" #提交文件至本地仓库,并且写上注释
[[email protected] oldboyedu47]# git push -u origin master #最后提交到刚搭建的gublab服务器。
浏览器操作:
点击头部、点击项目名称
点击Repository下面的Files,下面就有刚提交的文件,因没写内容,所以是空的,也有对应的描述。
服务器插入内容操作:
[[email protected] oldboyedu47]# echo 1234 >>123test #插入内容到文件内
[[email protected] oldboyedu47]# git commit -a -m "mod 123test" #提交到缓存区,并且写描述
[[email protected] oldboyedu47]# git push -u origin master #提交到Github服务器平台里。
刷新页面后,点击文件内会有刚更新的内容。
也可在浏览器上编辑内容,并且同步到GitLab服务器内:
点击Edit编辑
填写内容
下面滚动,点击这个按钮更新。
GitLab服务器更新内容,并查看文件内容是否更新:
[[email protected] oldboyedu47]# git pull #下载代码
[[email protected] oldboyedu47]# cat 123test #查看更新文件的内容,看到已经更新了。
1234
hello
test
ceshi!! QQ806304019
GitLab代码小总结:
git push -u origin master #推送代码
git pull #下载代码
说明:这些命令都比较常用。
1.21 开发使用pycharms将开发代码上传到GitLab平台(默认是在master主分支里操作)(开发的软件与git仓库建立连接,进行push等操作)
打开pycharms,点击VCS-第六个-Git
填写这个地址到pycharms界面。
因为win没有解析oldboyedu的域名IP,所以改成GitLab服务器的IP地址。
输入登录GitLab网页的账号与密码
连接这个git项目成功。
点击Clone
询问:克隆完了是要打开这个工作目录吗?点击yes
询问是打开一个新窗口,还是默认在新窗口,点击OK。
会出现一个新的目录,并且有工作目录中新的文件,里面可以填写文件内容。
点击这个配置选项,提交到缓存区,和填写注释信息。
填写注释信息,并且提交缓存区
填写邮件地址,点击下一步。
点击push
点击网页刷新
点击Branch或点击下面那个就是我们刚py提交的注释。
1.22 在Pycharms里新建子分支进行工作
在Pycharms的项目右键点击新建分支的设置
新建一个分支
分支名字叫做linux
切换分支的设置
新建linux分支的时候,已经默认进入linux分支里面了,所以如果要切换到其他分支的时候可以在里面设置切换。
切换到linux分支的时候,点击文件进行修改。
然后按照上面的操作,进行提交注释信息。
点击push
在网页上,点击刷新
点击Branches分支
看到新的分支出现后,会有linux分支出现,有master并且出现刚才创建的linux。
顺着linux分支-123test文件-点击进去会看到linux分支修改的内容。
这里有合并请求
提交合并请求
接受合并请求
点击左上方名字,找到master分支的文件,看下是否合成在一个文件里了。
点击进入master分支
点击123test文件,看到linux分支的文件内容,已经合并到master一起了。
说明:以前就是分支修改文件在合并到主分支里了。
运维要操作的内容:以上都是开发要做的,我们运维只需git push –u origin master下载代码,然后git put更新代码。
1.23 Gitlab备份管理
vim /etc/gitlab/gitlab.rb #编辑配置文件
#配置文件中最后插入参数。
参数说明:第一个是备份的路径,第二个是文件保留时间,默认为秒单位,现在设置是7天。
1.24 Gitlab备份的数据恢复
停止数据写入服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl status #检查两个写入数据的服务是否down掉。
gitlab-reke gitlab:backup:restore BACKUP=源码备份文件名 #注意不加.tar后缀,在备份目录找源码文件,文件在备份目录找,提示默认yes。
gitlab-ctl restart
gitlab-ctl status #检查是否启动成功
说明:过一会在访问gitlab页面,才可看到恢复的仓库。
1.25 亚哥讲座
hequn
告诉上面谁使用git上传,用户是谁
只要被跟踪过来的文件,进行更改,就要重新commit 提交,相当于做任何一个操作(移动或更改内容),就要重新提交一次。
不能直接使用MV 否则要重新提交,特别麻烦 所以使用git mv 就不用提交,用GIT系统内置就好一些。
新建用户组oldboy,设置这个用户组的权限(公开,还是需登录),新建用户dev,并且设置8位密码,新建项目,控制这个项目的用户组是oldboy,项目名称为test_web,最后点击oldboy用户组将dev添加进去并且设置dev开发角色。 随后点击扳手点击test_web项目在git服务端初始化克隆好好仓库(git clone)。
开发: 使用刚创建的dev账号登录web界面,点击test_web项目,克隆好仓库到本地,随后无权限提交到master,所以在客户端创建dev分支,在切换到dev分支,创建文件,并且提交到本地仓库(暂存区域 git add . git commit -m “123”),随后在浏览器切换到dev分支可看到文刚创建的文件就在里面,在dev分支右上角创建合并请求,填写合并理由留下历史记录,最后点击创建请求。
开发老大:在浏览器登录administrator账号,找到dev发送的合并请求,点击dev发过来的请求,然后点击Merge确认合并,此时网页上同步了,但是git服务端工作目录没有同步过来,需要手工git pull下载同步下来,就可以了。
502错误可能是与jenkins端口8080冲突
java环境冲突。
以上是关于Git版本管理及代码上线的主要内容,如果未能解决你的问题,请参考以下文章