版本控制系统 (VCS)

版本控制系统 (VCS) 是软件,帮助软件开发人员携手合作,他们的工作并保持完整的历史。

以下是VCS目标

  1. 允许开发人员同步工作.
  2. 不要覆盖对方的变化.
  3. 维护历史的每一个版本.

以下是常见的VCS

  1. 集中式版本控制系统(CVCS)
  2. 分散式/分布式版本控制系统(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分支管理是很简单的。只需要几秒钟,创建,删除和合并分支。

  1. 自由和开放源码
  2. 快速和小
  3. 隐式备份
  4. 安全
  5. 不需要强大的硬件
  6. 更简单的分支

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 基本概念的更多相关文章

  1. Git基本概念,流程,分支,标签及常用命令

    Git基本概念,流程,分支,标签及常用命令 Git一张图 Git基本概念 仓库(Repository) 分支(Branch) Git工作流程 Git分支管理(branch) 列出分支 删除分支 分支合 ...

  2. Git 基本概念及常用命令

    一.基本概念 文件的三种状态:(任何一个文件在git中都有以下三种状态) 1) 已提交(committed):表示该文件已经被安全地保存在本地数据库中了. 2) 已修改(modified):表示修改了 ...

  3. Git的概念及常用命令

    一.概念 Git是一个分布式的版本控制工具,区别于集中式管理的SVN. 二.优势 每个开发者都拥有自己的本地版本库,可以在本地任意修改代码.创建分支,不会影响到其他开发者的使用: 所有版本信息均保存在 ...

  4. Git核心概念

    Git作为流行的分布式版本管理系统,用好它要理解下面几个核心的概念. 1.Git保寸的是文件完整快照,而不是差异变化或者文件补丁.每次提交若文件有变化则会指向上一个版本的指针而不重复生成副本. Git ...

  5. GIT基本概念和用法总结【转】

    在日常使用GIT过程中,经常会出错,比如无意间丢失了未提交的数据,回退版本时丢失了工作目录,等等.经过思考发现,所有这些错误都是因为对GIT中一些基本的概念模糊而导致,因为对一些基本概念不清晰,导致对 ...

  6. Git基础概念与Flow流程介绍

    目录 Git相关 基本概念 常见客户端 TortoiseGit Sourcetree Intellij Idea 命令行 常用命令 存储区域 命令之 add & commit &pus ...

  7. Git 核心概念

    原文链接 Git的核心概念 聪聪的个人网站 本文不是Git使用教学篇,而是偏向理论方面,旨在更加深刻的理解Git,这样才能更好的使用它,让工具成为我们得力的助手. 版本控制系统 Git 是目前世界上最 ...

  8. Git的概念和基本使用

    概念篇 1. Git简介: 鉴于有些同学可能还不知道Git是什么,我首先对Git做个简短的介绍.Git就是类似于svn的一个版本控制工具,他其实和hg更像一些,hg也是一个分布式版本控制工具,可以说g ...

  9. [linux] Git基本概念&操作

    1.基本概念 版本控制系统:一种软体工程技巧,籍以在开发的过程中,确保由不同人所编写的同一项目代码都得到更新.并追踪.记录整个开发过程. 集中式(SVN)/ 分布式(GIT)版本控制系统:SVN的版本 ...

  10. git 笔记- 概念

    本文参考书中内容 http://cnpmjs.org/ 镜像文件 下载插件的镜像 可参考fis 对于任何一个文件,在Git 内都只有三 种状态:已提交(committed),已修改(modified) ...

随机推荐

  1. springboot 多环境配置yml或properties

    https://www.cnblogs.com/mr-yang-localhost/p/8971327.html   springboot 多环境配置 https://blog.csdn.net/li ...

  2. Mac下命令行下载android源代码并构建apk过程

    前提是java .sdk.ndk .cmake.gradle .gradlew都已经安装和配置好. 1.下载源码: git clone http://git-ma.xxxx.com.cn/xxxx/x ...

  3. 尼康G镜头与D镜头的差别

    尼康系统实现自动对焦必须:机身和镜头,两者至少其一拥有马达. 尼康现在新出的G头,几乎都带马达.但在胶片时代的G头,几乎都不带马达. G只表示:没有手动光圈环. D只表示:镜头能提供距离信息给机身. ...

  4. spring+mybatis的插件【shardbatis2.0】+mysql+java自定义注解实现分表

    一.业务场景分析 只有大表才需要分表,而且这个大表还会有经常需要读的需要,即使经过sql服务器优化和sql调优,查询也会非常慢.例如共享汽车的定位数据表等. 二.实现步骤 1.准备pom依赖 < ...

  5. 关于iPhone音频的那些事

    音频文件(Audio File) 1.有两个概念(1).文件格式(File Format or Audio Containers)——描述文件本身的格式,里面的音频数据可以用不同的编码格式.例如:ca ...

  6. crontab -e 新法

    SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root 0 3 * * * /home/rsync.sh //每天晚上3点执行一次同步 ...

  7. TouchEvent: dispatchTouchEvent(), onTouch() , onTouchEvent(), requestDisallowInterceptTouchEvent() 方法中的一些细节

    Q: onTouchListener与onClickListener谁先执行?A: onTouchListener中的内容先执行.若其中的onTouch方法返回true,代表该事件已被onTouch消 ...

  8. raft Paxos

    CONSENSUS: BRIDGING THEORY AND PRACTICE https://ramcloud.stanford.edu/~ongaro/thesis.pdf https://web ...

  9. MySQL开发索引创建规范

    1. [强制]业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引. 说明:不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明显的:另外,即使在应用层做了非 ...

  10. (原创)如何使用boost.asio写一个简单的通信程序(一)

    boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...