【51CTO.com快译】在软件开发界,经常有这么一种说法:“在您想进阶到高级水平之前,请先了解和掌握正在使用的软件工具的各种技术术语与操作命令。” 同理,了解Git的工作流、及其关键概念,将有助于您在日常使用Git的版本控制系统时,实现更高效的代码管理。
到底Git是什么?
与其他版本控制系统(VCS)一样,Git可用于跟踪同一条数据信息(或文件类型)的不同版本。
然而,Git之所以能够从其他VCS中脱颖而出,主要得益于它的分布式本质,或称为分布式版本控制系统(distributed version control system,DVCS)。在该环境中,每个开发人员的主机都充当着“节点(node)”或“集线器(hub)”的角色。
为了维护数据的完整性,Git将每个文件系统的更改都视为新产生的数据。因此,Git的基本框架结构是由各种分支所组成,而用户的初始项目则位于“主”分支上。此法不但促进了有效的功能性开发,还实现了简单的错误修复与代码审查。同时,频繁的同步工作,可以持续在对等的节点之间进行合并等操作。
Git是由Linus Torvalds开发的,其背后的思想主要体现在“速度”上。“易于分支与合并”、“数据完整性”和“更大规模的协作”是其三大特点。Git能够在本地存储用户整个项目的历史记录,并允许用户快速地访问到某个旧版本的数据。
Git的工作流:Git文件的三种状态
众所周知,许多VCS都用到了双层体系结构:存储库和工作副本。但是,Git选用的却是三层结构:工作目录、暂存区和本地存储库。因此,对于同一段代码,Git通过三个层面,提供了以不同时间间隔和版本来保存当前工作的方式。
同时,Git利用三个阶段,在每个层面上存储相同代码(或对象)的不同(也可以是相同)状态。
首次,在初始化(或为克隆)阶段,Git项目会在本地计算机上创建一个“工作目录”,以便用户开始编辑源代码。
在源代码的第一阶段,您既可以自由地修改文件和目录,又能够选择您喜欢的编辑器来添加、删除、移动、重命名或复制它们。当然,我更喜欢使用vim,这一最有效和最强大的文本编辑器(请详见https://www.vim.org/)。
一旦您完成了本次编辑,就可以使用“Git add”命令来暂存自己的修改,即:在“暂存区域”中进行“索引”,并显示下一步将要提交的内容预览。
接着,当第一组代码已被暂存到Staging区域中之后,您就可以在工作目录中进行更多的编辑了。在此,工作目录和暂存区域将具有当前项目的不同快照(或称版本)。
为了同步上述两个阶段,您只需通过Git add来暂存自己在工作目录中的最新修改便可。
除了添加代码的更改,如果您想撤消索引中的任何变更暂存的话,则需要执行不同的Git命令。
而如果您在此阶段并不需要进行任何更改,那么就可以通过“Git commit”,来通过提交的方式,将代码移动并存储在本地的Git存储库之中。
也就是说,提交命令可以确保在上述所有三个阶段中的项目都具有相同的快照,并让Git的三个阶段彼此保持同步。
另外,“Git status”命令可以显示当前的工作树状态、以及您的文件所处的阶段。
Git的关键术语与命令
您可能以前使用过一些比较流行的VCS,它们包括:CVS(并发版本控制系统,http://savannah.nongnu.org/projects/cvs),SVN(Apache SubVersioN,https://subversion.apache.org/),ClearCase(https://www.ibm.com/us-en/marketplace/rational-clearcase)和BitKeeper(http://www.bitkeeper.org/)等。虽然Git也是一种VCS,但是它使用了自己的文件系统架构来处理源代码。因此,与各种早期VCS相比,Git有着自己的一些术语、以及命令方法。
存储库
它使用计算机上的某个本地位置,来存储项目的整个快照,以保证每一个微小的改动都能够被存储与检索。用户可以轻松查看和检索存储库的日志。也就是说,您可以跳转到代码的任何一个旧的状态。
工作目录
它为项目的最新代码提供了本地工作的副本。
索引(暂存区,缓存)
索引可以理解为用户下一次提交的快照。一旦您通过Git add在工作目录中暂存或添加了代码,那么代码就会被移动至此。就像内存中的缓存一样,暂存区充当了工作目录(代码的开发位置)与本地存储库(代码的存放位置)之间的中间层。在该层中,您可以快速预览即将提交的项目快照。当然,您仍然可以在索引中编辑(添加、修改或删除)代码。而且,您还可以在此处还原项目的旧版本(或状态)。
提交
提交是项目的最新快照(状态)。如下图所示,每一次提交都会被分配一个唯一的提交ID。而且所有的提交日志都被存储在本地的存储库中。
作为一个Git对象,提交会存储各种属性,其中包括:提交ID、作者姓名、创作日期和提交消息(标题和正文)。
git hash(或称SHA-1)
上面提到的唯一性“提交ID”,一般被称为“git hash”或“SHA-1”(请参见https://en.wikipedia.org/wiki/SHA-1)。通常情况下,每一个文件系统的修改(添加、删除、编辑、移动、复制、重命名、以及文件权限等)都会被视为一个文件。同时,其内容将被转换为唯一的SHA-1代码。上图所示的提交ID为:8db083e7df7c9241e640b66c89c6f02649ac885a。在实际使用中,一般参考的是其前7位唯一数,即8db083e。
当然,您不必记住整个哈希ID(下面我们将要提到),Git会使用一种诸如分支和标记之类的引用,来处置这些提交ID(哈希)。
分支
分支是某个独立的开发“平行线”。通过分支,您可以在隔离的工作区中处理同一段代码。由于每一个分支都有自己的项目历史副本,因此您可以在分支上根据自己的代码进行开发,并方便地进行相互合并。
主分支
当某个项目首次被创建为Git项目时,主分支就是其主要的本地默认分支。
HEAD
HEAD是每个分支上最新提交的快照。每个分支都有提交ID,如前面所说,它是SHA-1的短名称、或是指针的引用。HEAD始终指向分支的最新提交(代码),并在每次提交时自动进行向前移动,以指向最新的提交ID。
此外,当某个分支指向较旧的提交、而不是最新的提交时,就会出现“detached HEAD”的概念。
可见,一旦拥有了最新提交ID的引用“HEAD”,我们的确不必再去记忆那个最近工作过的提交ID了。
checkout
该命令会切换到指定的分支,并显示当前项目的状态。同时,它还能够恢复以前工作过的树文件。
克隆
克隆是远程存储库的工作副本。“git clone”命令能够下载远程存储库,并在本地计算机上创建工作目录。
此外,该命令还可以存储那些从本地存储库,到远程存储库的各种远程处理程序、或指针引用。
上图显示了一个名为“learn_branching”的本地存储库,它使用URL:https://github.com/divyabhushan/learn_branching.git,来跟踪名为“origin”的远程存储库。
结论
希望上面所提及的基本概念,能够让您更好地理解使用Git的各种有效方法。当然,Git还包含了更多的概念与实用命令,您可以通过“git help -a”,来拉出全量的命令列表,并通过“git help ”,来对某个命令进行深入了解。
原文标题:Git: Basic Terms and Commands Explained,作者:Divya Bhushan
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】
领取专属 10元无门槛券
私享最新 技术干货