手把手教你玩转Git分布式版本控制系统!

目录linux

 

  1. Git诞生历史 git

  2. Git环境准备github

  3. Git安装部署web

  4. Git经常使用命令算法

  5. Git基本操做数据库

  6. Git管理分支结构安全

  7. Git管理标签服务器

  8. GitLab安装部署网络

  9. GitHub托管服务app

  10. Git客户端工具

 

1

Git诞生历史

 

我 想你们还记得Linus torvalds在1991年时发布了Linux操做系统吧,从那之后Linux系统变不断发展壮大,由于Linux系统开源的特性,因此一直接受着来自 全球Linux技术爱好者的贡献,志愿者们经过邮件向Linus发送着本身编写的源代码文件,而后由Linus本人经过手工的方式将代码合并,但这样不只 没有效率,并且真的是太痛苦了。


一 直到2002年,Linux系统通过十余年的不断发展,代码库已经庞大到没法再让Linus经过手工的方式管理了,可是Linus真的很不喜欢CVS或者 Subversion版本控制系统,因而商业公司BitMover决定将其公司的BitKeeper分布式版本控制系统受权给Linux开发社区来免费使 用,当时的BitKeeper能够比较文件内容的不一样,还可以将出错的文档还原到历史某个状态,Linus终于放下了内心的石头。

 

分布式版本控制流程图

 

CVS和Subversion属于传统的版本控制系统,而分布式版本控制系统最大的特色是不须要每次提交都把文件推送到版本控制服务器,而是采用分布式版本库的机制,使得每一个开发人员都够从服务器中克隆一份完整的版本库到本身计算机本地,没必要再彻底依赖于版本控制服务器,而且由于数据都在本身本地,不只效率提升了,并且即使咱们离开了网络依然能够执行提交文件、查看历史版本记录、建立分支等等操做,真的是开发者的福音啊。

 

就 这样平静的度过了三年时间,可是Linux社区汇集着太多的黑客人物,2005年时,那位曾经开发Samba服务程序的Andrew由于试图破解 BitKeeper软件协议而激怒了BitMover公司,立即决定再也不向Linux社区提供免费的软件受权了,此时的Linus其实也早已有本身编写分 布式版本控制系统的打算了,因而便用C语言花了2周建立了Git分布式版本控制系统,并上传了Linux系统的源代码。

 

git_logo

 

Git 不只是一款开源的分布式版本控制系统,并且有其独特的功能特性,例如大多数的分布式版本控制系统只会记录每次文件的变化,说白了就是只会关心文件的内容变 化差别,而Git则是关注于文件数据总体的变化,直接会将文件提交时的数据保存成快照,而非仅记录差别内容,而且使用SHA-1加密算法保证数据的完整 性。

 

Git为了提升效率,对于没有被修改的文件,则不会重复存储,而是建立一个连接指向以前存储过的文件。

 

git提交流程图

 

在正式使用前,咱们还须要弄清楚Git的三种重要模式,分别是已提交、已修改、已暂存。

 

  • 已提交(committed):表示数据文件已经顺利提交到Git数据库中。

  • 已修改(modified):表示数据文件已经被修改,但未被保存到Git数据库中。

  • 已暂存(staged):表示数据文件已经被修改,并会在下次提交时提交到Git数据库中。

 

提交前的数据文件可能会被随意修改或丢失,但只要把文件快照顺利提交到Git数据库中,那就能够彻底放心了,流程为:

 

  1. 在工做目录中修改数据文件。

  2. 将文件的快照放入暂存区域。

  3. 将暂存区域的文件快照提交到Git仓库中。

 

 

git工做模式

 

2

Git环境准备

 

 

3

Git安装部署

 

Git 是分布式的版本控制系统,咱们只要有了一个原始Git版本仓库,就可让其余主机克隆走这个原始版本仓库,从而使得一个Git版本仓库能够被同时分布到不 同的主机之上,而且每台主机的版本库都是同样的,没有主次之分,极大的保证了数据安全性,并使得用户可以自主选择向那个Git服务器推送文件了,其实部署 一个git服务器是很是简单的。

 

 

4

Git经常使用命令

 

   add         #添加文件内容至索引

   bisect  #经过二分查找定位引入 bug 的变动

   branch     #列出、建立或删除分支

   checkout   #检出一个分支或路径到工做区

   clone  #克隆一个版本库到一个新目录

   commit  #记录变动到版本库

   diff  #显示提交之间、提交和工做区之间等的差别

   fetch  #从另一个版本库下载对象和引用

   grep  #输出和模式匹配的行

   init  #建立一个空的 Git 版本库或从新初始化一个已存在的版本库

   log  #显示提交日志

   merge  #合并两个或更多开发历史

   mv  #移动或重命名一个文件、目录或符号连接

   pull  #获取并合并另外的版本库或一个本地分支

   push  #更新远程引用和相关的对象

   rebase  #本地提交转移至更新后的上游分支中

   reset  #重置当前HEAD到指定状态

   rm  #从工做区和索引中删除文件

   show  #显示各类类型的对象

   status  #显示工做区状态

   tag  #建立、列出、删除或校验一个GPG签名的 tag 对象

 

5

Git基本操做

 

5.1Git提交数据

 

咱们能够简单的把工做目录理解成是一个被Git服务程序管理的目录,Git会时刻的追踪目录内文件的改动,另外在安装好了Git服务程序后,默认就会建立好了一个叫作master的分支,咱们直接能够提交数据到了

 

 

5.2Git移除数据

 

有些时候会向把已经添加到暂存区的文件移除,但仍然但愿文件在工做目录中不丢失,换句话说,就是把文件从追踪清单中删除。

 

 

5.3Git移动数据

 

 

5.4Git历史记录

 

 

 

5.5Git还原数据

 

 

此时以为写得不妥,想还原某一次提交的文件快照

 

 

Git 服务程序中有一个叫作HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,可是由于Git是分布式版本控制系 统,为了不历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每一个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记 录,而上一个提交版本会叫HEAD^,上上一个版本则会叫作HEAD^^,固然通常会用HEAD~5来表示往上数第五个提交版本。

 

 

刚刚的操做实际上就是改变了一下HEAD版本指针的位置,就是你将HEAD指针放在那里,那么你的当前工做版本就会定位在那里,要想把内容再还原到最新提交的版本,先看查看下提交版本号

 

 

怎么搞得?居然没有了Introduction software这个提交版本记录?

 

缘由很简单,由于咱们当前的工做版本是历史的一个提交点,这个历史提交点尚未发生过Introduction software更新记录,因此固然就看不到了,要是想“还原到将来”的历史更新点,能够用git reflog命令来查看全部的历史记录:

 

 

如是只是想把某个文件内容还原,就没必要这么麻烦,直接用git checkout命令就能够的,先写一段话:

 

 

咱们忽然发现不该该写一句话的,能够手工删除(当内容比较多的时候会很麻烦),还能够将文件内容从暂存区中恢复:

 

 

这其中是有一套规则,若是暂存区中有该文件,则直接从暂存区恢复,若是暂存区没有该文件,则将还原成最近一次文件提交时的快照。

 

6

Git管理分支结构

 

分 支便是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但若是将这不完整的代码直接提交到git仓库中,又有可能影响到其余人的工 做,此时咱们即可以在该软件的项目之上建立一个名叫“拍照功能”的分支,这种分支只会属于你本身,而其余人看不到,等代码编写完成后再与原来的项目主分支 合并下便可,这样即能保证代码不丢失,又不影响其余人的工做。

 

 

通常在实际的项目开发中,咱们要尽可能保证master分支是很是稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工做的时候则能够新建不一样的工做分支,等到工做完成后在合并到master分支上面,因此团队的合做分支看起来会像上面图那样。

 

生产代码提交方式

 

6.1Git建立分支

 

 

6.2Git合并分支

 

如今,咱们想把linux的工做成果合并到master分支上了,则可使用”git merge”命令来将指定的的分支与当前分支合并:

 

git合并分之示意图

 

 

6.3Git分支冲突

 

可是Git并不能每次都为咱们自动的合并分支,当遇到了内容冲突比较复杂的状况,则必须手工将差别内容处理点,好比这样的状况:

 

git分支冲突示意图

 

 

#那么此时,咱们在master与linux分支上都分别对中readme文件进行了修改并提交了,那这种状况下Git就无法再为咱们自动的快速合并了,它只能告诉咱们readme文件的内容有冲突,须要手工处理冲突的内容后才能继续合并:

 

 

7

Git管理标签

 

当版本仓库内的数据有个大的改善或者功能更新,咱们常常会打一个相似于软件版本号的标签,这样经过标签就能够将版本库中的某个历史版本给记录下来,方便咱们随时将特定历史时期的数据取出来用,另外打标签其实只是像某个历史版本作了一个指针,因此通常都是瞬间完成的。

 

 

8

GitLab安装部署

 

1. 安装和配置必要的依赖关系Install and configure the necessary dependencies。

 

若是你安装postfix发送邮件,请选择“网站设置”中。而不是使用后缀也能够用邮件或 配置自定义SMTP服务器。若是你想使用的进出口,请 配置为SMTP服务器。

 

在CentOS7,下面的命令将在系统防火墙打开HTTP和SSH访问。

 

 

2. 添加gitlab包服务器安装包Add the GitLab package server and install the package

 

 

3. 配置并启动gitlab Configure and start GitLab

 

4. 浏览到主机名和登陆Browse to the hostname and login

 

 

8.1GitLab配置ssh

 

gitlab搭配ssh默认端口引起的血战

 

问题以下:

 

仔细发现故障状况

 

 

 

解决后效果,作一个对比,细心的朋友确定能发现:gitlab和github其实pull和push是同样的,因此我会在下面介绍如何用github来pull和push。

 

9

GitHub托管服务

 

Github 顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不只能够托 管各类Git版本仓库,还拥有了更美观的Web界面,您的代码文件能够被任何人克隆,使得开发者为开源项贡献代码变得更加容易,固然也能够付费购买私有 库,这样高性价比的私有库真的是帮助到了不少团队和企业。


大多数用户都是为了寻找资源而爱上Github的,首先进入网站,点击注册(Sign up):

 

若是没有注册的朋友点击注册

 

填写注册信息

 

选择仓库类型,默认免费,点击底下finish

sign up注册

 

咱们的GitHub帐号注册完成

 

咱们在向Github推送文件时,能够选择SSH协议模式,在本机生成密钥

 

 

点击setting帐户配置

 

点击SSH keys

 

添加git服务器上生成的公钥id_rsa.pub点击Add  key添加

 

查看ssh公钥信息

 

准备工做已经完毕,右上角点击建立一个新的仓库

 

填写仓库的信息

 

 

建立成功后会跳转到该仓库,选择ssh模式,复制版本仓库克隆地址

 

 

刷新一下web,果真看到版本仓库已经同步了

 

10

Git客户端工具

https://www.sourcetreeapp.com/

Git和Mercurial的Windows或Mac的客户端

相关文章
相关标签/搜索