Git使用及安装教程

Git

git简介

git是一个版本控制软件,目前主流的版本控制软件有git和svn

区别

集中式版本控制系统(svn)

  • 开发者之间共用一个仓库(repository)
  • 所有操作需要联网,一旦断网,无法保存操作

分布式版本控制系统(git)

  • 每个开发者都是一个仓库的完整克隆,每个人都是服务器
  • 支持断网操作

Git工作流图

git先建立一个共享目录,客户端上传文件,每次修改,都会在git服务器上保留各个版本
在这里插入图片描述

git使用共享目录正式名称为版本库

版本库

典型的客户/服务器系统

  • 版本库是版本控制的核心
  • 任意数量的客户端
  • 客户端通过写数据库方向代码
    在这里插入图片描述

Git的基本操作

问题:

要求先快速搭建好一台Git服务器,并测试该版本控制软件,要求如下

  • 安装git软件
  • 创建版本库
  • 客户端克隆版本仓库到本地
  • 本地工作目录修改数据
  • 题交本地修改到服务器

方案:

在这里插入图片描述

步骤

步骤一:部署git服务器

1)yum安装git软件

yum -y install git
git --version

2)初始化一个空仓库

mkdir /var/git
git init /var/git/project --bare   #创建仓库
ls /var/git/project
步骤二:客户端测试

使用git常用指令列表

指令使用
clone将远程服务器的仓库克隆到本地
config修改git配置
add添加修改到暂存区
commit提交修改到本地仓库
push提交修改到远程服务器

1)clone克隆服务器仓库到本地

yum -y install git
git clone root@192.168.19.130:/var/git/project
cd project
ls -a
ls .git  #git服务器中默认的文件在这里

2)修改git配置

git config --global user.name "your name"
git config --global user.email "131@163.com"
cat ~/.gitconfig   #git服务器的使用用户,区分不同的用户的git
[user]
	email = 131@163.com
	name = your name

3)本地工作区对数据进行增删改查(必须进入仓库在进行操作)

这个project就是我们本地工作区(也是仓库)

echo "init date "> init.txt
mkdir demo 
cp /etc/hosts demo

4)查看仓库中数据件的状态

git status

5)将工作区的修改提交到缓存区

git add .  #添加文件

6)将暂存区修改提交到本地仓库

git commit -m "注释"   #一般注释用来描写这个文件发生了什么变化

多创建几个版本,方便接下来测试

7)将本地仓库中的数据推送到远程服务器(推送到git服务器)

git config --global push.default simple
git push

8)将服务器上的数据更新到本地

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

git pull

9)查看版本日志

git log   
git log --pretty=oneline  #显示一行信息
git log --oneline     #以更简短的方式显示
git reflog   #显示当前版本版本号从那里克隆来的

在这里插入图片描述

每一个commit 是一个版本

备注:客户端也可使用图形程序访问服务器,windows需要安装git和tortoisegit

在Linux中git的图形化软件包(git-gui)

git指针操作(head指针)

问题:

沿用上述练习,使用head指针,具体要求如下:

查看git版本信息

移动指针

通过移动head指针恢复数据

方案

head指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本,没做一次提交操作都会导致git更新一个版本,head指针也跟着自动移动

步骤:head指针基本操作

1)准备工作(多对数据仓库进行修改,提交操作,以产生多个版本)

 echo "asdaweq" >> init.txt 
 git add .
 git commit -m "v2"
 echo "asdaweq" >> new.txt 
 git add .
 git commit -m "v3"
 echo "asdaw123eq" >> new.txt 
 git add .
 git commit -m "v4"
 git push

2)查看版本信息

git log --oneline
a0789a1 (HEAD -> master, origin/master) v4
a308d7d v3
1423449 v2
3759966 v1
2a88674 zhushu
#head指向谁,当前在那个版本
也可使用git reflog来查看
git reflog 
a0789a1 (HEAD -> master, origin/master) HEAD@{0}: commit: v4
a308d7d HEAD@{1}: commit: v3
1423449 HEAD@{2}: commit: v2
3759966 HEAD@{3}: commit: v1
2a88674 HEAD@{4}: commit (initial): zhushu

3)移动head指针,将数据还原到任意版本

git reset --hard 版本号

4)模拟误删除后的数据还原操作

删除数据并提交,然后移动指针到有这个数据的版本,复制,然后回到刚刚的版本,在进行粘贴

git rm init.txt
git commit -m "rm"
git reflog 
git reset --hard 版本号
cp init.txt /tmp/
git reset --hard 版本号(最新版)
cp /tmp/init.txt .
git add .
git commit -m "还原"

git分支操作

问题:

沿用上述练习,使用git分支,具体要求如下

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

方案:

git支持按功能模块、时间、版本等标准创建分支,分支可以让开发分多条主线同时进行,每条主线互不影响,分支效果如图所示
在这里插入图片描述

一个圆圈代表一个版本,一般git服务器都是存放代码的

master分支(主分支,是代码的核心)

develop分支(develop最新开发成果的分支)

release分支(未发布新产品设置的分支)

hotfix分支(为了修复软件bug缺陷的分支)

feature分支(为开发新功能设置的分支)

步骤:

步骤一:查看并创建分支

1)查看当前分支

git status   
git branch -v   #查看所有分支

2)创建分支

 git branch hotfix  #创建一个hotfix的分支
 git branch feauture  #创建一个feature的分支,
 #创建的分支和master一致,因为是在master的基础上创建的
 git branch -v
  feauture 3fc4c5d rm
  hotfix   3fc4c5d rm
* master   3fc4c5d [ahead 1] rm  # *开头代表目前在那个分支
步骤二:切换与合并分支

1)切换分支

git checkout hotfix  #切换
git branch -v   #查看当前在那个分支
####################################
 git checkout hotfix 
Switched to branch 'hotfix'
 git branch -v
  feauture 3fc4c5d rm
* hotfix   3fc4c5d rm
  master   3fc4c5d [ahead 1] rm

2)在新的分支上可以继续进行数据操作(增删改查)

echo "fix" > fix.txt
git add .
git commit -m "fix"

3)将hotfix修改的数据合并到master分支

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

git checkout master 
ls 
git merge hotfix 

在这里插入图片描述

4)将所有本地修改提交给远程服务器

git push
步骤三:解决版本分支的冲突问题

1)在不同分支中修改相同文件的相同行数据,模拟数据冲突

git checkout hotfix 
echo "AAA" > a.txt
git add .
git commit -m "a"
git checkout master
echo "BBB" > a.txt
git add .
git commit -m "b"
git merge hotfix

在这里插入图片描述

自动合并失败,修正冲突然后提交修正的结果

2)查看有冲突的文件内容,修改文件为最终版本的数据,解决冲突

vim a.txt
<<<<<<< HEAD   #该文件包含有冲突的内容
BBB
=======
AAA
>>>>>>> hotfix
vim a.txt     #修改该文件,为最终需要的数据,解决冲突
BBB
git add .
git commit -m "resoled"

总结

分支指针与head指针的关系

  • 创建分支的本质是当前提交上创建一个可以移动的指针
  • 如何判断当前分支,答案是根据head这个特殊指针

分支操作流程如图5、6、7、8所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

git服务器

问题:

沿用上面练习,了解git不同的服务器模式,具体要求如下:

  • 创建ssh协议服务器
  • 创建git协议服务器
  • 创建HTTP协议服务器

git是基于ssh协议来完成操作的

方案:

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

步骤:

步骤一:ssh协议服务器(支持读写操作)

1)创建基于密码验证的ssh协议服务器(git服务器操作)

git init --bare /var/git/base_ssh

2)客户端访问的方式(A操作)

git clone root@192.168.19.130:/var/git/base_ssh
rm -rf base_ssh/

3)客户端生成ssh密钥,实现免密码登录git服务器(客户机操作)

 ssh-keygen -f /root/.ssh/id_rsa -N ''
 ssh-copy-id 192.168.19.130
 git clone root@192.168.19.130:/var/git/base_ssh

在这里插入图片描述

再次克隆不再需要密码

步骤二:git协议服务器(只读操作的服务器)

如果服务器中没有ssh服务,可使用以下方法

1)安装git-daemon软件包(git服务器操作)

yum -y install git-daemon

2)创建版本库(git服务器操作)

git init --bare /var/git/base_git

3)修改配置文件,启动git服务(git服务器操作)

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 --inetd --log-destination=stderr --verbose
...
修改后
...
ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/git --export-all \
          --user-path=public_git --inetd --log-destination=stderr --verbose
...

启动服务
systemctl start git.socket 

4)客户端访问

git clone git://192.168.19.130/base_git

在这里插入图片描述

步骤三:HTTP协议的服务器(只读操作的服务器)

前两种方式要都要求客户端有git软件,才能进行操作,http不装软件,也能看到仓库

1)安装gitweb、httpd软件包(git服务器操作)

yum -y install httpd gitweb

2)修改配置文件,设置仓库根目录

vim +11 /etc/gitweb.conf    #打开配置文件,定位在11行
#第十行有模板
$projectroot = "/var/git"; #添加一行

3)创建版本仓库(git服务器操作)

git init --bare /var/git/base_http

4)启动httpd服务器

systemctl start httpd

5)客户端访问方式
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值