码迷,mamicode.com
首页 > 其他好文 > 详细

Git版本管理及代码上线

时间:2018-10-09 00:46:09      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:描述   服务端   总结   strong   管理软件   admin   dmi   updating   报错   

 

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无修改(举例)

开发操作:

[root@oldboyedu-47 git_data]# git branch       #当前在linux分支

* linux

  master

 

[root@oldboyedu-47 git_data]# echo "this is test" >>11    #我追加点信息到一个文件里

 

[root@oldboyedu-47 git_data]# git commit -a -m "this is test"     #提交到缓存区,并且写上文件提交的注释

 

linux运维管理人员操作:

[root@oldboyedu-47 git_data]# git checkout master     #管理人员切换到master主分支

Switched to branch ‘master‘

[root@oldboyedu-47 git_data]# cat 11                  #打开开发人员在自家分支里修改的11文件,并没有修改,是空的,说明没有真正修改文件。

 

[root@oldboyedu-47 git_data]# git log -1              #查看最新的第一条日志历史记录,发现不是我们刚才提交的注释那条信息,说明确实没有。

commit eb77741ee3142b37f37002524f0812851a9627fb

Author: “fxs” <“806304019@qq.com”>

Date:   Fri Aug 17 21:27:46 2018 +0800

 

    ceshi.test

 

1.18.4 合并分支(将linux分支的工作成果合并到master分支)

[root@oldboyedu-47 git_data]# git branch       #查看现在在哪个分支,必须得切换到master分支下在合并

  linux

* master

 

[root@oldboyedu-47 git_data]# git merge linux  #使用merge命令合并linux分支,将指定分支合并到当前master分支

Updating eb77741..c3eb6fe

Fast-forward

 11 | 1 +       #有新增内容

 1 file changed, 1 insertion(+)

 

[root@oldboyedu-47 git_data]# cat 11       #在查看在开发修改的文件里的信息,确定有新内容了。

this is test

 

[root@oldboyedu-47 git_data]# git log -1   #查看最新的历史记录,也能看到刚才开发提交的那个注释信息,已经同步过来了。

commit c3eb6fe004849d0e5c4e4d06d5c3ffcf20576ac9

Author: “fxs” <“806304019@qq.com”>

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会话,用无痕窗口登陆就需要输入账号密码,因为刚设置的是私有仓库,共有的就不用登陆。

 

服务器内操作:

[root@oldboyedu-47 tools]# ssh-keygen      #生成一个密钥对,简称公钥,安装全部回车。

[root@oldboyedu-47 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 root@oldboyedu-47

 

点击警告标志进入页面

 

将公钥内容放置里面,填写名称,名称可随意填,有描述性就好。

 

点击头顶标志,再点击刚创建项目的名字。

 

网页上有专门的操作教程,可查看使用,第一个是创建新的存储库,第二个是在现有文件夹操作的命令,(第一种情况是从开发电脑没有文件夹的情况下去操作的命令,第二种情况是开发有这个文件夹的目录再执行的命令。)

 

服务器操作:

[root@oldboyedu-47 /]# git clone git@oldboyedu-47:root/oldboyedu47.git        #执行这条命令,输入yes,会在/目录克隆创建一个项目名称的目录,想在哪个目录生成这个工作目录,就切换到哪个目录再克隆生成,这个其实像共享目录似得,想要在本地同步一下这个工作目录,必须要输入账号密码,但使用了ssh密钥分发,就登录不用账号和密码了。(开发用户操作)

 

[root@oldboyedu-47 /]# cd oldboyedu47/                        #进入克隆好的工作目录

[root@oldboyedu-47 oldboyedu47]# touch 123test                #创建一个文件

[root@oldboyedu-47 oldboyedu47]# git add 123test              #将文件添加到暂存区

[root@oldboyedu-47 oldboyedu47]# git commit -m "123 git-test" #提交文件至本地仓库,并且写上注释

[root@oldboyedu-47 oldboyedu47]# git push -u origin master    #最后提交到刚搭建的gublab服务器。

 

浏览器操作:

点击头部、点击项目名称

点击Repository下面的Files,下面就有刚提交的文件,因没写内容,所以是空的,也有对应的描述。

 

服务器插入内容操作:

[root@oldboyedu-47 oldboyedu47]# echo 1234 >>123test              #插入内容到文件内

[root@oldboyedu-47 oldboyedu47]# git commit -a -m "mod 123test"       #提交到缓存区,并且写描述

[root@oldboyedu-47 oldboyedu47]# git push -u origin master        #提交到Github服务器平台里。

刷新页面后,点击文件内会有刚更新的内容。

 

也可在浏览器上编辑内容,并且同步到GitLab服务器内:

点击Edit编辑

填写内容

下面滚动,点击这个按钮更新。

 

GitLab服务器更新内容,并查看文件内容是否更新:

[root@oldboyedu-47 oldboyedu47]# git pull          #下载代码

[root@oldboyedu-47 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版本管理及代码上线

标签:描述   服务端   总结   strong   管理软件   admin   dmi   updating   报错   

原文地址:https://www.cnblogs.com/shell520/p/9757896.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!