Git概述

一、Git版本控制器概述

(1)什么是版本控制器

  • 版本控制器就是用来存放代码的
  • 版本控制器的种类:

SVN:集中式的版本控制器,也就是所有的代码都存放在一台服务器上,写代码之前都需要上传或下载

GIT:分布式的版本控制器

(2)Git简介

  • Git是目前世界上最先进的分布式版本控制系统,没有之一
  • Git是一个开源的分布式版本控制系统,用以有效、高速的处理从小到大的项目版本管理
  • Git是Linus Torvalds为了帮助管理linux内核开发而开发的一个开源的版本控制软件

(3)扩展——Git的诞生

 Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

 事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

 你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

 不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

 安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

 Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

 Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

(4)Git的作用

我们用word写文档会遇到一下问题:

1.想删除一个段落,又怕将来想恢复找不回,然后把文件另存为,最后在windwos下生成好多的文档。

  1. 过段时间想找回被删除的文字,已经不知道删除前保存在哪个文件
  1. 想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删
  1. 有些文档需要别人帮助填写,你传给同事以后,你又更新了文档,然后同事填完文件又传给了你,怎么去合并文档。

而使用git以后就可以解决上面遇到的所有问题。它可以统一进行版本控制,自动记录每次文件的改动,进行代码合并,不需要把文件传来传去,如果想查看某次改动,只需要在软件里瞄一眼就可以

(5)集中式和分布式的区别

  • 集中式:

CVS和SVN都是集中式的版本控制系统

集中式版本控制系统,版本库是集中存放在中央服务器的,但是因为工作使用的是自己的电脑,所以在工作之前需要从中央服务器获取最新的代码,并且在工作完成后需要再上传到中央服务器

集中式版本控制器的最大缺点就是需要联网才能工作,如果是局域网还行,带宽大,速度够大,可是如果在互联网上,遇到网速慢的话传一个10M的文件可能都需要五分钟,工作效率太慢,尤其是都是下班的时候才会上传代码,在下班点上传的请求更多,导致上传速度更慢

  • 分布式:

分布式版本控制器是没有“中央服务器”的,每个人的电脑上都是一个完整的版本库,这样在工作时就不需要联网了,因为版本库就在自己的电脑上,在多人协作时,只需要把各自的修改推送给对方,就可以互相看到对方的修改了

和集中式版本控制器相比,分布式版本控制器的安全性显然是比较好的,因为每个人的电脑都有完整的版本库,当一台电脑损坏不要紧只需要从别人电脑在复制一份就行,但是集中式的版本控制器一旦损坏,代码就会丢失

在实际使用分布式版本控制器时,很少在两人之间互相推送版本库,因为可能两个人不在一个局域网内,所以分布式版本控制器也有一个“中央服务器”,但是这个中央服务器仅仅是用来方便交换大家的修改,并不像集中式版本控制器那样中央服务器一坏数据就丢失

(6)Git的工作原理

对于任何一个文件,Git对其都有四种状态,分别是:工作目录、暂存区、本地仓库、远程仓库

一个文件刚刚创建时,是工作目录的状态,当在里面写好代码之后,这个文件会到暂存区,在暂存区的文件是可以取消提交的,之后文件就会到本地仓库,本地仓库的文件可以上传到远程仓库,方便和其他人共享

(7)Git的优点

  1. 更顺畅的工作流程,开发过程中,完全可以离线操作

  2. 快速,Git分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换

  3. 弹性的本地分支,在svn下,你建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令

  4. 仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净

  5. 内容按元数据方式存储,所有的版本信息都位于.git目录下

  6. 完整性好,更易于协作开发

  7. 用户群大,现在已经有成千上万个开源项目采用Git来做项目管理,github上更是有无数个代码仓库

(8)分支讲解

我们在公司里面一般使用master作为主分支,开发人员使用开发分支,当开发人员开发完代码以后,会合并到master主分支,进行上线部署服务,我们还可以使用测试分支,当开发人员写完代码以后,可以合并到测试分支,进行测试,测试成功以后,合并到master分支进行生产环境部署,当然为了安全部署,防止线上代码BUG,我们可以创建回滚分支,当我们部署的新版本的软件出现问题,可以马上使用回滚分支进行回滚到上一个稳定版。

#常用命令
查看所有分支        git branch 
分支创建            git branch bb    #bb为分支名称
分支切换            git checkout bb
创建加切换分支       git checkout -b bb
删除本地分支         git branch -d dgf
删除远程分支         git push origin --delete dgf

二、部署Git

(1)实验环境

主机名ip角色软件系统
git192.168.100.202servergitcentos7.4
client192.168.100.203clientgitcentos7.4

(2)实验步骤

在两台主机上都安装git,需要ssh的支持,某些版本服务器需要安装git-core才是服务器

******(1)git主机步骤
[root@Centos7 ~]# hostnamectl  set-hostname git
[root@Centos7 ~]# su
[root@git ~]# yum -y install git   #默认就有,没有的话就使用yum安装


******(2)client主机步骤
[root@Centos7 ~]# hostnamectl set-hostname client
[root@Centos7 ~]# su
[root@client ~]# yum -y install git

(3)使用git

-服务端创建空仓库

******(1)创建git用户,这里使用root用户也是可以的
[root@git ~]# useradd git
[root@git ~]# echo git:123123 | chpasswd 
[root@git ~]# su git


******(2)创建仓库
[git@git ~]$ mkdir project   #要先cd到自己的家目录进行创建,仓库名称叫做project
[git@git ~]$ ls
project
[git@git ~]$ cd project/
[git@git project]$ git init --bare    #必须执行完这个命令初始化版本仓库后,project才可以称得上是git的仓库
初始化空的 Git 版本库于 /home/git/project/

-linux客户端进行测试

******(1)这个不需要创建其他用户,直接使用root用户即可,创建工作目录
[root@client ~]# mkdir git
[root@client ~]# cd git/


******(2)拉取库到本地
[root@client git]# git clone git@192.168.100.202:/home/git/project  #复制202的库到本地
正克隆到 'project'...
The authenticity of host '192.168.100.202 (192.168.100.202)' can't be established.
ECDSA key fingerprint is SHA256:VhTZ5YxS5af2rHtfCvyc6ehXh3PD2A8KY2MyE6rHjiU.
ECDSA key fingerprint is MD5:e8:41:d2:8a:7e:e9:a9:47:a3:f0:29:be:e9:6d:df:51.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.202' (ECDSA) to the list of known hosts.
git@192.168.100.202's password:   #输入git用户密码
warning: 您似乎克隆了一个空版本库。
[root@client git]# ll   #查看是否成功拉取了中央服务器的库
总用量 0
drwxr-xr-x 3 root root 18 625 22:58 project


******(3)往本地的仓库添加新文件
[root@client git]# cd project/
[root@client project]# touch aaa.txt
[root@client project]# ll
总用量 0
-rw-r--r-- 1 root root 0 625 23:00 aaa.txt


******(4)添加到暂存区
[root@client project]# git add .   #把当前目录的文件添加到暂存区
[root@client project]# git status   #查看暂存区的文件状态
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#	新文件:    aaa.txt    #这个就是刚刚放到仓库的新文件
#


******(5)提交到本地仓库
[root@client project]# git commit -m "aaa"  #-m后面加备注信息

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"     #发现报错,需要登录邮箱,指定name,输入这两条命令,随便写就行
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@client.(none)')
[root@client project]# git config --global user.email "aaa@qq.com"   
[root@client project]# git config --global user.name "aaa"
[root@client project]# git commit -m "aaa"   #重新提交到本地仓库
[master(根提交) 47fcee0] aaa
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 aaa.txt
[root@client project]# git remote add origin git@192.168.100.202:/home/git/project.git #确认本地仓库和远程仓库的状态正常,也就是监测origin项目是否存在,默认在初始化仓库后就会生成一个origin项目
fatal: 远程 origin 已经存在。


******(6)将本地仓库代码推送到远程仓库
[root@client project]# git push origin master   #推送到远程仓库
git@192.168.100.202's password:    #输入git中央服务器的密码
Counting objects: 3, done.
Writing objects: 100% (3/3), 189 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.100.202:/home/git/project
 * [new branch]      master -> master
 
 
******(7)将本地仓库删除,重新同步远程仓库
[root@client project]# ll
总用量 0
-rw-r--r-- 1 root root 0 625 23:00 aaa.txt
[root@client project]# cd ..
[root@client git]# rm -rf *
[root@client git]# ll
总用量 0
[root@client git]# git clone git@192.168.100.202:/home/git/project  #重新拉取库到本地
正克隆到 'project'...
git@192.168.100.202's password: 
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
接收对象中: 100% (3/3), done.
[root@client git]# ll
总用量 0
drwxr-xr-x 3 root root 33 625 23:25 project
[root@client git]# cd project/ 
[root@client project]# ll           #成功复制
总用量 0
-rw-r--r-- 1 root root 0 625 23:25 aaa.txt

-Windows使用方法

  • Windows使用的是TortoiseGit软件,也叫乌龟

  • TortoiseGit是一个开放的git版本控制系统的源客户端,支持windows xp、vista、7的软件版本,该软件功能和git是相同的

  • TortoiseGit是界面化操作,而git是命令行操作,默认安装好是英文语言,可以使用中文的语言包

  • TortoiseGit只是一个程序外壳,想要使用必须依赖一个Git Core,所以必须安装windows的git,下载地址为: https://gitforwindows.org/

  • TortoiseGit的官网:https://tortoisegit.org/download/,官网下载慢的话,可以去360软件管家下载

在这里插入图片描述
在这里插入图片描述

到windows安装git

在这里插入图片描述

先安装git,最好切换到Administered登录

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

安装好之后,在桌面点击右键就会出现git的选项,如果没有需要重启系统

在这里插入图片描述

复制远程库(项目),点击GUI图形化方式

在这里插入图片描述

在这里插入图片描述

URL:git@192.168.100.202:/home/git/project
在这里插入图片描述

选择本地仓库时会自动创建目录

在这里插入图片描述在这里插入图片描述

注意:git密码需要输入三次

选择项目分支

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

添加个性化交互信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

点击删除,删除本地仓库,然后复制远程仓库,按照上面的步骤进行复制远程仓库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

-使用TortoiseGit

安装TortoiseGit,默认安装就可以满足所有要求,并且之前已经安装和设置过Windows的git,所以安装时全部选择默认的即可
在这里插入图片描述

在这里插入图片描述

TortoiseGit的汉化包同样全部下一步

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

添加到暂存区

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击推送,推送到远程仓库
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

-使用Github

  • GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。

  • GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。

  • GIT服务器并不需要我们搭建,我们使用github就可以满足我们的需求

  • 官网: https://github.com/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#生成密钥
[root@git ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:it268x6RVv9esC4hxQ8XHtcl1AmauD9CG4ZASn1YuBY root@git
The key's randomart image is:
+---[RSA 2048]----+
|   ...+.     o+.=|
|  . oE .  . o oo+|
|   . .+  ..+ . + |
|     o. .o..+ o  |
|    .  .S= ..+.  |
|     o +o.= ...o |
|    . o oo + .o .|
|      .. .. oo . |
|      o=o    .o  |
+----[SHA256]-----+
[root@git ~]# cat .ssh/id_rsa.pub    #查看密钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC54DY7BCQ04clFqFwSToMFUf1fU2w7FVuzVkqg8rUSGmjohh2Dy6ViPI0q1A23FW0KExGw+3kSDgz5wEsU5wjfqrrNySXI2xEcsTZZqYZv2hIlMavfXD74pqiHy1g2fjSLfnsneN3a1aPyETbq0wYSjz4nHzIFFrflDnKb1n0JsfHqUstgp3AHRgOG2hI75LbTWO3I9lLz+3rC5i6YEMFYPBPhVneLiboKA3E3cFWhcr/yjeVi3XcdWW3Q7MjI/3/txNwWIYBMIdZKkHuFHs1g4OhKmadEy60yPOicoL0MSMyiLRmD9C25weM7limmAN93BsbhIa24Hiq+DOxGGzoT root@git

点击设置
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

成功添加

-测试在git机器上登录

[root@git ~]# ssh -T git@github.com
The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.229.188.59' (RSA) to the list of known hosts.
Hi renzeyuan! You've successfully authenticated, but GitHub does not provide shell access.

在这里插入图片描述

-新建存储库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

创建存储库以后,GitHub会提示我们相关仓库操作,一种是我们本地没有仓库,需要先创建再推送,另一种就是我们本地已经有了仓库,直接推送上去就行了

-客户端工作流程

[root@git ~]# mkdir git-test
[root@git ~]# cd git-test/
[root@git git-test]# echo "aaa" > abc.txt
[root@git git-test]# git init 
初始化空的 Git 版本库于 /root/git-test/.git/
[root@git git-test]# git add abc.txt 
[root@git git-test]# git commit -m "abc"

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@git.(none)')
[root@git git-test]# git config --global user.name "renzeyuan"  
[root@git git-test]# git config --global user.email "1248873545@qq.com"
[root@git git-test]# git commit -m "abc"
[master(根提交) de847c9] abc
 1 file changed, 1 insertion(+)
 create mode 100644 abc.txt
 [root@git git-test]# git remote add origin https://github.com/renzeyuan/test.git  #把本地仓库和远程仓库连接
 [root@git git-test]#  git push -u origin master
Username for 'https://github.com': renzeyuan    #输入账户
Password for 'https://renzeyuan@github.com':    #输入密码
Counting objects: 3, done.
Writing objects: 100% (3/3), 208 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/renzeyuan/test.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。   #显示成功

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值