Git Git服务器 制作nginx的RPM包

Git基本概念

版本控制概要 工作区 暂存区 本地仓库 远程仓库

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误
版本库

典型的客户/服务器系统

  • 版本库是版本控制的核心
  • 任意数量客户端
  • 客户端通过写数据分享代码

在这里插入图片描述

集中式版本控制系统
  • CVS SVN(Subversion)
  • 开发者之间共用一个仓库(repository)
  • 所有操作需要联网
分布式版本控制系统
  • Git BitKeeper(收费)
  • 每个开发者都是一个仓库的完整克隆,每个人都是服务器
  • 支持断网操作
分布式工作流

在这里插入图片描述
搭建一台Git服务器,并测试该版本控制软件,要求如下:
1.安装Git软件
2.创建版本库
3.客户端克隆版本仓库到本地
4.本地工作目录修改数据
5.提交本地修改到服务器
在这里插入图片描述

1:部署分布式Git服务器

  1. YUM安装Git软件
[root@web1 ~]# yum -y install git
  1. 初始化一个空仓库
[root@web1 ~]# mkdir /var/git
[root@web1 ~]# git init /var/git/project --bare 
[root@web1 ~]# ls /var/git/project
config  description  HEAD  hooks  info  objects  refs   
步骤二:客户端测试

使用git常用指令列表

clone将远程服务器的仓库克隆到本地
config修改Git配置
add添加修改到暂存器
commit提交修改到本地仓库
push提交修改到远程服务器
  1. clone克隆服务器仓库到本地
[root@web2 ~]# yum -y install git
[root@web2 ~]# git clone root@192.168.2.100:/var/git/project 
[root@web2 ~]# cd project
[root@web2 ~]# ls 
  1. 修改git配置
[root@web2 project]# git config --global user.email "you@example.com"
[root@web2 project]# git config --global user.name "Your Name"
[root@web2 project]# cat ~/.gitconfig 
[user]
    email = you@example.com
    name = Your Name
  1. 本地工作区对数据进行增删改查(必须要先进入仓库再操作数据)
[root@web2 project]# echo "init date" > init.txt
[root@web2 project]# mkdir demo
[root@web2 project]# cp /etc/hosts demo
  1. 查看仓库中数据的状态
[root@web2 project]# git status
  1. 将工作区的修改提交到暂存区
[root@web2 project]# git add .
  1. 将暂存区修改提交到本地仓库
[root@web2 project]# git commit  -m  "任意字符"
[root@web2 project]# git status
  1. 将本地仓库中的数据推送到远程服务器(web2将数据推送到web1)
[root@web2 project]# git config --global push.default simple
[root@web2 project]# git push
root@192.168.2.100's password:  输入服务器root密码
[root@web2 project]# git status
  1. 将服务器上的数据更新到本地(web1的数据更新到web2)

备注:可能其他人也在修改数据并提交服务器,就会导致自己的本地数据为旧数据,使用pull就可以将服务器上新的数据更新到本地。

[root@web2 project]# git pull
  1. 查看版本日志
[root@web2 project]# git log //日志
[root@web2 project]# git log --pretty=oneline
[root@web2 project]# git log --oneline 
[root@web2 project]# git reflog

备注:客户端也可以使用图形程序访问服务器。
Windows需要安装git和tortoiseGit。
在这里插入图片描述
在这里插入图片描述

2: HEAD指针操作

操作HEAD指针,具体要求如下:
查看Git版本信息,移动指针
通过移动HEAD指针恢复数据
HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。

步骤一:HEAD指针基本操作
  1. 准备工作(多对数据仓库进行修改、提交操作,以产生多个版本)。
    [root@web2 project]# echo "new file" > new.txt
    [root@web2 project]# git add .
    [root@web2 project]# git commit -m "add new.txt"
    [root@web2 project]# echo "first" >> new.txt
    [root@web2 project]# git add .
    [root@web2 project]# git commit -m "new.txt:first line"
    [root@web2 project]# echo "second" >> new.txt
    [root@web2 project]# git add .
    [root@web2 project]# git commit -m "new.txt:second"
    [root@web2 project]# echo "third" >> new.txt
    [root@web2 project]# git add .
    [root@web2 project]# git commit -m "new.txt:third"
    [root@web2 project]# git push
    [root@web2 project]# echo "123" > num.txt
    [root@web2 project]# git add .
    [root@web2 project]# git commit -m "num.txt:123"
    [root@web2 project]# echo "456" > num.txt
    [root@web2 project]# git add .
    [root@web2 project]# git commit -m "num.txt:456"
    [root@web2 project]# echo "789" > num.txt
    [root@web2 project]# git add .
    [root@web2 project]# git commit -m "num.txt:789"
    [root@web2 project]# git push
  1. 查看Git版本信息。
    [root@web2 project]# git reflog
    [root@web2 project]# git log --oneline
    04ddc0f num.txt:789
    7bba57b num.txt:456
    301c090 num.txt:123
    b427164 new.txt:third
    0584949 new.txt:second
    ece2dfd new.txt:first line
    e1112ac add new.txt
    1a0d908 初始化
  1. 移动HEAD指针,将数据还原到任意版本。

提示:当前HEAD指针为HEAD@{0}。

[root@web2 project]# git reset --hard 301c0
[root@web2 project]# git reflog
301c090 HEAD@{0}: reset: moving to 301c0
04ddc0f HEAD@{1}: commit: num.txt:789
b427164 HEAD@{5}: commit: new.txt:third
e1112ac HEAD@{8}: commit: add new.txt
1a0d908 HEAD@{9}: commit (initial): 初始化
[root@web2 project]# cat num.txt      #查看文件是否为123
123
[root@web2 project]# git reset --hard 7bba57b
[root@web2 project]# cat num.txt     #查看文件是否为123,456
123
456
[root@web2 project]# git reflog    #查看指针移动历史
7bba57b HEAD@{0}: reset: moving to 7bba57b
301c090 HEAD@{1}: reset: moving to 301c0
… …
[root@web2 project]# git reset --hard 04ddc0f  #回到最后一次修改的版本

3:Git分支操作

学习操作Git分支,具体要求如下:

  • 查看分支
  • 创建分支
  • 切换分支
  • 合并分支
  • 解决分支的冲突

Git支持按功能模块时间版本等标准创建分支,分支可以让开发分多条主线同时进行,每条主线互不影响,分支效果如图-5所示。
在这里插入图片描述
常见的分支规范如下:

  • MASTER分支(MASTER是主分支,是代码的核心)。
  • DEVELOP分支(DEVELOP最新开发成果的分支)。
  • RELEASE分支(为发布新产品设置的分支)。
  • HOTFIX分支(为了修复软件BUG缺陷的分支)。
  • FEATURE分支(为开发新功能设置的分支)。
步骤一:查看并创建分支
  1. 查看当前分支
[root@web2 project]# git status
# On branch master
nothing to commit, working directory clean
[root@web2 project]# git branch -v
* master 0dc2b76 delete init.txt
  1. 创建分支
[root@web2 project]# git branch hotfix
[root@web2 project]# git branch feature
[root@web2 project]# git branch -v
  feature 0dc2b76 delete init.txt
  hotfix  0dc2b76 delete init.txt
* master  0dc2b76 delete init.txt
步骤二:切换与合并分支
  1. 切换分支
[root@web2 project]# git checkout hotfix
[root@web2 project]# git branch -v
  feature 0dc2b76 delete init.txt
* hotfix  0dc2b76 delete init.txt
master  0dc2b76 delete init.txt
  1. 在新的分支上可以继续进行数据操作(增、删、改、查)
[root@web2 project]# echo "fix a bug" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "fix a bug"
  1. 将hotfix修改的数据合并到master分支

注意,合并前必须要先切换到master分支,然后再执行merge命令。

[root@web2 project]# git checkout master
[root@web2 project]# cat new.txt        #默认master分支中没有hotfix分支中的数据
[root@web2 project]# git merge hotfix
Updating 0dc2b76..5b4a755
Fast-forward
 new.txt | 1 ++
 1 file changed, 1 insertions(+)
步骤二:解决版本分支的冲突问题
  1. 在不同分支中修改相同文件的相同行数据,模拟数据冲突
[root@web2 project]# git checkout hotfix
[root@web2 project]# echo "AAA" > a.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "add a.txt by hotfix"
[root@web2 project]# git checkout master
[root@web2 project]# echo "BBB" > a.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "add a.txt by master"
[root@web2 project]# git merge hotfix
自动合并 a.txt
冲突(添加/添加):合并冲突于 a.txt
自动合并失败,修正冲突然后提交修正的结果。
  1. 查看有冲突的文件内容,修改文件为最终版本的数据,解决冲突。
[root@web2 project]# cat a.txt                #该文件中包含有冲突的内容
<<<<<<< HEAD
BBB
=======
AAA
>>>>>>> hotfix
[root@web2 project]# vim a.txt              #修改该文件,为最终需要的数据,解决冲突
BBB
[root@web2 project]# git add .
[root@web2 project]# git commit -m "resolved"

分支指针与HEAD指针的关系。
创建分支的本质是在当前提交上创建一个可以移动的指针
如何判断当前分支呢?答案是根据HEAD这个特殊指针
分支操作流程如图-6,图-7,图-8,图-9,图-10所示。
图-6 HEAD指针指向master分支
在这里插入图片描述
图-7 切换分支,HEAD指针指向testing分支
在这里插入图片描述
图-8 在testing分支中修改并提交代码
在这里插入图片描述
图-9 将分支切换回master分支
在这里插入图片描述
图-10 在master分支中修改数据,更新版本
在这里插入图片描述

4:Git服务器

学习Git不同的服务器形式,具体要求如下:

  1. 创建SSH协议服务器
  2. 创建Git协议服务器
  3. 创建HTTP协议服务器

Git支持很多服务器协议形式,不同协议的Git服务器,客户端就可以使用不同的形式访问服务器。创建的服务器协议有SSH协议、Git协议、HTTP协议。

步骤一:SSH协议服务器(支持读写操作)
  1. 创建基于密码验证的SSH协议服务器(web1主机操作)
[root@web1 ~]# git init --bare /var/git/base_ssh
Initialized empty Git repository in /var/git/base_ssh/
  1. 客户端访问的方式(web2主机操作)
[root@web2 ~]# git clone root@192.168.2.100:/var/git/base_ssh
[root@web2 ~]# rm -rf base_ssh
  1. 客户端生成SSH密钥,实现免密码登陆git服务器(web2主机操作)
[root@web2 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''    批量配置秘钥命令
[root@web2 ~]# ssh-copy-id  192.168.2.100
[root@web2 ~]# git clone root@192.168.2.100:/var/git/base_ssh
[root@web2 ~]# git push

布置ssh秘钥
[root@web2 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@web2 ~]# ssh-copy-id 192.168.2.100

步骤二:Git协议服务器(只读操作的服务器)
  1. 安装git-daemon软件包(web1主机操作)
[root@web1 ~]# yum -y install git-daemon
  1. 创建版本库(web1主机操作)
[root@web1 ~]# git init --bare /var/git/base_git
Initialized empty Git repository in /var/git/base_git/
  1. 修改配置文件,启动git服务(web1主机操作)
[root@web1 ~]# vim /usr/lib/systemd/system/git@.service
修改前内容如下:
ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/lib/git 
--export-all --user-path=public_git --syslog --inetd –verbose
修改后内容如下:
ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/git 
--export-all --user-path=public_git --syslog --inetd –verbose
[root@web1 ~]# systemctl  start  git.socket
  1. 客户端访问方式(web2主机操作)
[root@web2 ~]# git clone git://192.168.2.100/base_git
步骤三:HTTP协议服务器(只读操作的服务器)
  1. 安装gitweb、httpd软件包(web1主机操作)
[root@web1 ~]# yum -y install httpd gitweb
  1. 修改配置文件,设置仓库根目录(web1主机操作)
[root@web1 ~]# vim +11 /etc/gitweb.conf 
$projectroot = "/var/git";                        #添加一行
  1. 创建版本仓库(web1主机操作)
[root@web1 ~]# git init --bare /var/git/base_http
  1. 启动httpd服务器
[root@web1 ~]# systemctl start httpd
  1. 客户端访问方式(web2主机操作)
[root@web2 ~]# firefox http://192.168.2.100/git/
步骤四:课外扩展知识:注册使用Github
  1. 登陆网站https://github.com,点击Sign up(注册),如图-所示。
    在这里插入图片描述
  2. 填写注册信息(用户名,邮箱,密码),如图所示
    在这里插入图片描述
  3. 初始化操作,如图所示
    在这里插入图片描述
    在这里插入图片描述

注意,初始化完成后,到邮箱中去激活Github账户。

  1. 创建仓库、使用仓库

点击Start a project(如图所示),
在这里插入图片描述
填写项目名称(项目名称任意),如图所示。
在这里插入图片描述
往仓库中上传文件或新建文件,如图所示
在这里插入图片描述
下载仓库中的代码,如图所示。
在这里插入图片描述

  1. 命令行操作(需要联网的主机,如真实机)
[root@pc001 ~]# yum -y install git
[root@pc001 ~]# git clone https://github.com/账户名称/仓库名称
#clone指令用于将服务器仓库中的资料打包下载到本地
[root@pc001 ~]# cd 仓库名称
[root@pc001 ~]# 任意修改文件,或新建文件
[root@pc001 ~]# git add .
#add添加新文件
[root@pc001 ~]# git commit -m "test"
[root@pc001 ~]# git push
#commit和push实现提交代码的功能
[root@pc001 ~]# git pull    #pull可以从githuab服务器拉取数据到本地

5:制作nginx的RPM包

使用nginx-1.12.2版本的源码软件,生成对应的RPM包软件,具体要求如下:
软件名称为nginx
软件版本为1.12.2
RPM软件包可以查询描述信息
RPM软件包可以安装及卸载
安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。
配置文件中的描述信息如表
在这里插入图片描述

步骤一:安装rpm-build软件
  1. 安装rpm-build软件包
[root@web1 ~]# yum -y install  rpm-build
  1. 生成rpmbuild目录结构
[root@web1 ~]# rpmbuild -ba nginx.spec //会报错,没有文件或目录
[root@web1 ~]# ls /root/rpmbuild //自动生成的目录结构
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
  1. 准备工作,将源码软件复制到SOURCES目录
[root@web1 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
  1. 创建并修改SPEC配置文件
[root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec 
Name:nginx           #源码包软件名称
Version:1.12.2       #源码包软件的版本号
Release:10           #制作的RPM包版本号
Summary: Nginx is a web server software.    #RPM软件的概述    
#Group:                      #定义属于什么组包,不属于及不填写注释掉
License:GPL                  #软件的协议
URL:    www.test.com         #网址
Source0:nginx-1.12.2.tar.gz  #源码包文件的全称
#BuildRequires:      #制作RPM时的依赖关系 只是提醒不解决
#Requires:           #安装RPM时的依赖关系
%description
nginx [engine x] is an HTTP and reverse proxy server.    #软件的详细描述
%post
useradd nginx       #非必需操作:安装后脚本(创建账户)
%prep
%setup -q           #自动解压源码包,并cd进入目录
%build
%configure          #把%configure改成./configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc
/usr/local/nginx/*    #对哪些文件与目录打包
%changelog
步骤二:使用配置文件创建RPM包
  1. 安装依赖软件包
[root@web1 ~]# yum -y install  gcc  pcre-devel openssl-devel
  1. rpmbuild创建RPM软件包
[root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
[root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
步骤三:安装软件
[root@web1 ~]# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm 
[root@web1 ~]# rpm -qa |grep nginx
[root@web1 ~]# ls /usr/local/nginx/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值