zoukankan      html  css  js  c++  java
  • 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无修改(举例)

    开发操作:

    [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环境冲突。

  • 相关阅读:
    解决在cmd命令下不能输入中文方法
    报错注入
    html表单中的name属性和value属性
    xss漏洞
    DVWA-xss反射型(跨站脚本漏洞)
    DVWA-brute force
    owsap top 10 2017(十大web安全应用程序安全)
    sqli_labs less-5
    盲注
    c++ 类
  • 原文地址:https://www.cnblogs.com/shell520/p/9757896.html
Copyright © 2011-2022 走看看