目录
- Git基本概念
- Git常用的命令
- Git资源
Git基本概念
通过上图我们可以直观的看出,传统的VCS(Version control system)系统是基于中央处理的系统模型,但Git则是采用了完全不同的分布式处理系统模型,这样带来的变化是显而易见的,Git系统开发难度相较于传统的VCS系统上升了不少(不过这点对用户来说并没有什么影响),但是由于分布式系统模型带来的好处非常之多,传统VCS系统需要与中央仓库在线的进行代码同步,在无网络或者中央仓库服务不可用的情况下,代码是无法进行版本管理操作的;Git系统则可以忽略这点,因为用户仓库就分布在各个客户端机器中,用户可以脱机进行代码的版本操作,等稍后网络回复或者主仓库服务可用时再将代码仓库的变化同步到主仓库服务即可。这个小小的变化对于现代软硬件工程来说是至关重要的,因为越来越多的跨地域,跨时域的开发工作方式层出不穷,这样自由的组合定然需要更加自由的版本控制系统来支撑。
观察两种存储模型图例之后,我们也不难看出,Git与传统仓库在处理仓库中文件的方式是截然不通,两种方式各有利弊。传统仓库中关于版本是分别针对文件以及整体仓库分别进行记录与管理的,这样做的好处是仓库损坏时,不至于丢失全部文件的记录信息,可以恢复其中的一部分,当然这也显然是这么做的坏处,即由于操作和管理的不当极有可能造成仓库版本的混乱;然而Git则是只针对仓库本身进行版本管理,每个版本号对应的是当前版本中所有的文件统一记录,这么做可以保持较高的仓库的一致性,对于本地仓库到中央仓库的同步问题也就更加容易处理,这么做是否就不利于恢复仓库的文件呢,单纯根据这点来说是的,但是Git采用其他的技术手段来规避这样的问题与风险(此处后续单独再讨论)。
Git在本地仓库中大致可分为三个主要的组成部分,工作目录(Working directory)、暂存区(Staging area)、仓库区(Git repository),这三个部分都被整合到在文件系统中的一个仓库目录中,因而我们平时所能看到Git本地仓库似乎就与一个本地文件系统目录并无二致,这也正式Git高效且易用的地方。其中工作目录(Working directory)就是我们正在编辑和操作的主要部分;暂存区(Staging area)用于将暂时性的工作成果以临时版本的方式存储起来,这个区域的主要用途是在多版本开发和维护时能够更高效的在多个版本间切换,且不影响已经作出的编辑修改的工作成果;仓库区(Git repository)则为本地Git仓库的主体,用于存储各个版本的内容,与此同时仓库区也是一个抽象的概念,即本地仓库与远程仓库都是仓库区不同的实现和表现形式,但用户对于所有的仓库区的操作可以高度的一致。
在Git仓库中的每个文件或者即将成为仓库文件的文件都会处于上图中的其中一个状态,也会因为用户的特定的操作从而改变自身的状态。
Git仓库中所有版本以及对应的文件都基于树形数据结构描述,每一次的提交(Commit)会映射到至少一个快照记录上,这个快照记录会记录当前快照版本中的每个文件的信息。
在Git仓库中非常重要的一个概念是指针,如何理解指针呢?为了更快速的能够上手使用Git系统,那么可以粗略的将指针理解为工作指针(HEAD)、分支(Branch)、标签(Tag),这些都是指针,这些指针指向哪里呢?都指向了唯一的提交(Commit)记录,HEAD指针表示当前的工作指针,通过Git命令我们可以将它指向我们需要工作的指针,这样我们就为工作区提取了将要工作的提交(Commit)记录的副本,在对工作区文件编辑后,我们可以通过Diff命令来查看变更的内容,其实就是将工作区的内容与HEAD指针当前指向的提交(Commit)记录进行比对。那么切换到某个分支(Branch)、标签(Tag)就比较容易理解了,即将HEAD指针指向目标分支(Branch)指针或标签(Tag)指针所指向的提交(Commit)记录,从而为工作区提取该提交(Commit)记录的快照的副本。
Git常用的命令
#通过HTTP协议Clone Git仓库
git clone https://xxx.com/xxxx/xxxxx.git
Git资源
Git官方站点,可以查阅相关的技术文档,以及下载客户端等。
https://git-scm.com/git-scm.com非常好用的Git系统,分为商用版和社区版,即便是社区版功能也是相当的丰富,许多的大型企业都在使用,高效稳定,支持主流的操作系统,也支持Docker,后续会写一篇基于Docker来使用的Gitlab的介绍,给需要的朋友们。
https://about.gitlab.com/about.gitlab.com