一、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下生成好多的文档。
- 过段时间想找回被删除的文字,已经不知道删除前保存在哪个文件
- 想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删
- 有些文档需要别人帮助填写,你传给同事以后,你又更新了文档,然后同事填完文件又传给了你,怎么去合并文档。
而使用git以后就可以解决上面遇到的所有问题。它可以统一进行版本控制,自动记录每次文件的改动,进行代码合并,不需要把文件传来传去,如果想查看某次改动,只需要在软件里瞄一眼就可以
(5)集中式和分布式的区别
- 集中式:
CVS和SVN都是集中式的版本控制系统
集中式版本控制系统,版本库是集中存放在中央服务器的,但是因为工作使用的是自己的电脑,所以在工作之前需要从中央服务器获取最新的代码,并且在工作完成后需要再上传到中央服务器
集中式版本控制器的最大缺点就是需要联网才能工作,如果是局域网还行,带宽大,速度够大,可是如果在互联网上,遇到网速慢的话传一个10M的文件可能都需要五分钟,工作效率太慢,尤其是都是下班的时候才会上传代码,在下班点上传的请求更多,导致上传速度更慢
- 分布式:
分布式版本控制器是没有“中央服务器”的,每个人的电脑上都是一个完整的版本库,这样在工作时就不需要联网了,因为版本库就在自己的电脑上,在多人协作时,只需要把各自的修改推送给对方,就可以互相看到对方的修改了
和集中式版本控制器相比,分布式版本控制器的安全性显然是比较好的,因为每个人的电脑都有完整的版本库,当一台电脑损坏不要紧只需要从别人电脑在复制一份就行,但是集中式的版本控制器一旦损坏,代码就会丢失
在实际使用分布式版本控制器时,很少在两人之间互相推送版本库,因为可能两个人不在一个局域网内,所以分布式版本控制器也有一个“中央服务器”,但是这个中央服务器仅仅是用来方便交换大家的修改,并不像集中式版本控制器那样中央服务器一坏数据就丢失
(6)Git的工作原理
对于任何一个文件,Git对其都有四种状态,分别是:工作目录、暂存区、本地仓库、远程仓库
一个文件刚刚创建时,是工作目录的状态,当在里面写好代码之后,这个文件会到暂存区,在暂存区的文件是可以取消提交的,之后文件就会到本地仓库,本地仓库的文件可以上传到远程仓库,方便和其他人共享
(7)Git的优点
更顺畅的工作流程,开发过程中,完全可以离线操作
快速,Git分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换
弹性的本地分支,在svn下,你建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令
仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净
内容按元数据方式存储,所有的版本信息都位于.git目录下
完整性好,更易于协作开发
用户群大,现在已经有成千上万个开源项目采用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 | 角色 | 软件 | 系统 |
git | 192.168.100.202 | server | git | centos7.4 |
client | 192.168.100.203 | client | git | centos7.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@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
-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 6月 25 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 6月 25 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 6月 25 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 6月 25 23:25 project [root@client git]# cd project/ [root@client project]# ll #成功复制 总用量 0 -rw-r--r-- 1 root root 0 6月 25 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密码需要输入三次
选择项目分支