Git 基本概念
版本控制系统 (VCS)
版本控制系统 (VCS) 是软件,帮助软件开发人员携手合作,他们的工作并保持完整的历史。
以下是VCS目标
- 允许开发人员同步工作.
- 不要覆盖对方的变化.
- 维护历史的每一个版本.
以下是常见的VCS
- 集中式版本控制系统(CVCS)
- 分散式/分布式版本控制系统(DVCS)
在这个教程,我们将介绍集中分布式的版本控制系统,尤其是Git。 Git 属于分布式版本控制系统。
分布式版本控制系统(DVCS)
集中式版本控制系统采用中央服务器上存储的所有文件和实现团队协作。但是CVCS主要缺点是中央服务器的单点故障,即故障。不幸的是,如果中央服务器宕机一小时,然后在该时段没有人可以合作。即使在最坏的情况下,如果中央服务器的磁盘被损坏,并没有采取适当的备份,那么将失去整个项目的历史。
DVCS客户不仅检出的最新快照目录,但他们也完全反映资源库。如果SEVER停机,然后从任何客户端库可以复制回服务器,以恢复它。每个结账是完整的版本库备份。 Git不会依赖中央服务器,这就是为什么可以执行许多操作,当处于脱机状态。可以提交修改,创建分支视图日志和执行其他操作,当处于脱机状态。只需要网络连接,发布您的更改,并采用最新变化。
Git优势
Git是GPL开源许可证下发布的。它可自由在互联网上。可以使用Git来管理项目无需支付一分钱。由于它是开源的,可以下载它的源代码,并根据要求进行更改。
由于大部分的操作都在本地执行,它给人带来巨大的好处,在速度方面。 Git 不依赖于中央服务器,为什么每一个操作就没有必要与远程服务器进行交互。 Git核心部分是写在C中,从而避免了与其他高级语言的运行时开销。虽然 Git中反映整个存储库,在客户端上的数据的大小是小的。这说明它是在客户端上的数据压缩和存储的效率有多高。
丢失数据的机会是非常罕见的,当有多个副本。存在于任何客户端的数据存储库中,因此它可以被用来在发生崩溃或磁盘损坏的镜像。
Git使用常见的加密散列函数,称为安全的哈希算法(SHA1)命名,并确定在其数据库中的对象。每一个文件并提交检查总结和检索其校验在结账的时候。意思是说,这是不可能改变文件,日期,提交信息和且从Git 数据库不知道Git 任何其他数据。
在CVCS情况下,中心服务器需要足够强大,要求整个团队服务。对于较小的团队,这是不是一个问题,但随着团队规模的增长,服务器的硬件限制可能成为一个性能瓶颈。在DVCS开发的情况下不与服务器进行交互,除非他们需要推或拉的变化。所有繁重发生在客户端上,所以服务器硬件可以是很简单的。
CVCS使用廉价的复制机制,这意味着如果我们创建新的分支,它会复制到新分支的所有代码,所以它的耗时和效率不高。另外CVCS的分支的删除和合并是复杂和费时的。但是,使用Git分支管理是很简单的。只需要几秒钟,创建,删除和合并分支。
- 自由和开放源码
- 快速和小
- 隐式备份
- 安全
- 不需要强大的硬件
- 更简单的分支
DVCS术语
本地资源库
每个VCS工具提供私有工作场所的工作副本。开发者在他的私人工作场所的变化,并提交这些更改后成为仓库的一部分。 Git的需要这一步,为他们提供的专用副本是整个仓库。用户可以执行许多操作,这个库中,如添加文件,删除文件,重命名文件,移动文件,提交改变,还有更多。
工作目录,暂存区域或索引
工作目录是地方文件检出。其他CVCS开发商一般不修改,并承诺他的变化,直接向版本库。但Git使用不同的策略。 Git不会跟踪每一个修改过的文件。每当提交操作,Git在目前临时区域的文件。只有文件被认为是目前在临时区域提交,而不是所有修改过的文件。
让我们来看看Git的基本工作流程。
第1步:修改文件的工作目录。
第2步:将这些文件添加到暂存区
第3步:执行commit操作。这将文件从临时区域。推送操作后,它永久地存储更改的Git仓库

假设修改了两个文件,即 “sort.c” and “search.c” ,两种不同分别 提交操作。可以添加一个文件分段区域,不提交。第一次提交后重复相同的步骤为另一个文件。
# First commit [bash]$ git add sort.c # adds file to the staging area [bash]$ git commit –m “Added sort operation”
# Second commit [bash]$ git add search.c # adds file to the staging area [bash]$ git commit –m “Added search operation”
BLOBS
BLOB代表二进制大对象。为代表 blob文件的每个版本。一个blob保存文件数据,但不包含任何有关文件的元数据。它是一个二进制文件,该文件它被命名为SHA1哈希 Git数据库中。在Git中,文件未提及的名字。一切固定内容寻址。
Tree
树是一个对象,它表示一个目录。它拥有blobs以及其他子目录。一棵树是一个二进制文件,该文件存储Blob树,也被命名为树对象的SHA1哈希的引用。
Commit
提交持有的库的当前状态。COMMIT命令同样由SHA1哈希的名字命名。可以考虑commit对象的链表节点。每个提交的对象有父commit 对象的指针。从给定的承诺可以遍历寻找在父指针,查看历史记录的提交。如果提交多个父承诺,这意味着特定的提交是由两个分支合并。
BRANCHES
分支用来创建另一条线的发展。默认情况下,Git的主分支,这是一样躯干颠覆。平时要工作的新功能创建一个分支。功能完成后,它被合并回master分支,我们删除分支。每个分支所引用HEAD,这点在分支的最新提交。每当做出了一个提交,HEAD更新为最新提交。
TAGS
包括特定版本库中的标签分配一个有意义的名称。标签是非常相似的分支,但不同的是,标签是不可改变的。手段标记的一个分支,没有人打算修改。一旦标签被创建为特定的提交,即使创建一个新的提交,也不会被更新。通常开发人员创建标签的产品发布。
CLONE
克隆操作的库创建实例。克隆操作不仅检出的工作拷贝,但它也反映了完整的信息库。用户可以执行许多操作,这个本地仓库。网络介入是唯一的一次,当正在同步资料库实例。
PULL
Pull操作复制的变化,本地的一个实例来从远程仓库。Pull操作是用于两个存储库实例之间的同步。这是在Subversion更新操作一样。
PUSH
推动从本地存储库实例的远程操作副本的变化。这是用来储存到Git仓库中永久改变。这是在Subversion的提交操作相同。
HEAD
HEAD指针总是指向分支的最新提交。每当你做出了一个提交,HEAD更新为最新提交。HEAD树枝存储在.git/refs/heads/ 目录中。
[CentOS]$ ls -1 .git/refs/heads/ master
[CentOS]$ cat .git/refs/heads/master 570837e7d58fa4bccd86cb575d884502188b0c49
REVISION
修订版本的源代码。在Git修订代表的提交。这些提交由SHA1安全哈希值确定。
URL
URL代表的Git仓库的位置。 Git 的URL存储在配置文件中。
[tom@CentOS tom_repo]$ pwd /home/tom/tom_repo
[tom@CentOS tom_repo]$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote “origin”] url = gituser@git.server.com:project.git fetch = +refs/heads/*:refs/remotes/origin/*
PS:如果您想和业内技术大牛交流的话,请加qq群(521249302)或者关注微信公众 号(AskHarries),谢谢!
Git 基本概念的更多相关文章
- Git基本概念,流程,分支,标签及常用命令
Git基本概念,流程,分支,标签及常用命令 Git一张图 Git基本概念 仓库(Repository) 分支(Branch) Git工作流程 Git分支管理(branch) 列出分支 删除分支 分支合 ...
- Git 基本概念及常用命令
一.基本概念 文件的三种状态:(任何一个文件在git中都有以下三种状态) 1) 已提交(committed):表示该文件已经被安全地保存在本地数据库中了. 2) 已修改(modified):表示修改了 ...
- Git的概念及常用命令
一.概念 Git是一个分布式的版本控制工具,区别于集中式管理的SVN. 二.优势 每个开发者都拥有自己的本地版本库,可以在本地任意修改代码.创建分支,不会影响到其他开发者的使用: 所有版本信息均保存在 ...
- Git核心概念
Git作为流行的分布式版本管理系统,用好它要理解下面几个核心的概念. 1.Git保寸的是文件完整快照,而不是差异变化或者文件补丁.每次提交若文件有变化则会指向上一个版本的指针而不重复生成副本. Git ...
- GIT基本概念和用法总结【转】
在日常使用GIT过程中,经常会出错,比如无意间丢失了未提交的数据,回退版本时丢失了工作目录,等等.经过思考发现,所有这些错误都是因为对GIT中一些基本的概念模糊而导致,因为对一些基本概念不清晰,导致对 ...
- Git基础概念与Flow流程介绍
目录 Git相关 基本概念 常见客户端 TortoiseGit Sourcetree Intellij Idea 命令行 常用命令 存储区域 命令之 add & commit &pus ...
- Git 核心概念
原文链接 Git的核心概念 聪聪的个人网站 本文不是Git使用教学篇,而是偏向理论方面,旨在更加深刻的理解Git,这样才能更好的使用它,让工具成为我们得力的助手. 版本控制系统 Git 是目前世界上最 ...
- Git的概念和基本使用
概念篇 1. Git简介: 鉴于有些同学可能还不知道Git是什么,我首先对Git做个简短的介绍.Git就是类似于svn的一个版本控制工具,他其实和hg更像一些,hg也是一个分布式版本控制工具,可以说g ...
- [linux] Git基本概念&操作
1.基本概念 版本控制系统:一种软体工程技巧,籍以在开发的过程中,确保由不同人所编写的同一项目代码都得到更新.并追踪.记录整个开发过程. 集中式(SVN)/ 分布式(GIT)版本控制系统:SVN的版本 ...
- git 笔记- 概念
本文参考书中内容 http://cnpmjs.org/ 镜像文件 下载插件的镜像 可参考fis 对于任何一个文件,在Git 内都只有三 种状态:已提交(committed),已修改(modified) ...
随机推荐
- BIO NIO AIO 简介
原文: https://github.com/zhongmingmao/nio_demo 简介 NIO与AIO的简单使用 基本概念 同步与异步 同步和异步是针对应用程序和内核的交互而言的:同步指的是用 ...
- A标签href属性详解--记录八
1.去掉<a>标签的下划线 <ul style=" list-style-type:none; margin:0;color:Gray; font-size:11px;ma ...
- Java:多线程,Exchanger同步器
1. 背景 类java.util.concurrent.Exchanger提供了一个同步点,在这个同步点,一对线程可以交换数据.每个线程通过exchange()方法的入口提供数据给他的伙伴线程,并接收 ...
- [Leet Code]Path Sum II
此题如果 #1 和 #4 判断分支交换,大集合就会超时(因为每次对于非叶子节点都要判断是不是叶子节点).可见,有时候if else判断语句也会对于运行时间有较大的影响. import java.uti ...
- Android TextView 支持的HTML标签
* <a href="..."> * <b> * <big> * <blockquote> * <br ...
- Xcode6中添加pch文件
转自:http://www.cnblogs.com/YouXianMing/p/3989155.html 1. 新建工程: 2. 创建pch文件: 3. 在setting里面进行设置: 4. 一切尽在 ...
- ES2017 中的 Async 和 Await
ES2017 在 6 月最终敲定了,随之而来的是广泛的支持了我最喜欢的最喜欢的JavaScript功能: async(异步) 函数.如果你也曾为异步 Javascript 而头疼,那么这个就是为你设计 ...
- node调试的两种方法
刚开始学node.js的时候,一直在用node-inspector,虽然很麻烦,但聊胜于无.后面公司牛人推荐使用node-webkit,就再也没用过node-inspector.再后来node.js版 ...
- 浅析C#中的托付
托付是寻址方法的.NET版本号.在C++中.函数指针仅仅只是是一个指向内存位置的指针,它不是类型安全的.而.NET托付全然不同,托付是安全类型的类,它定义了返回类型和參数的类型. 当把方法传递给其它方 ...
- 期权、RSU的区别与行权事宜
科普一下常见的股票.期权.股票增值权.虚拟股票等常见的激励方式,以及在兑换或行权的一些相关问题.股票(Stock): 股票市场也称权益市场,是专门对股票进行公开交易的市场,包括股票的发行和转让,分为一 ...