版本控制系统 (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. bash shell 合并多个文件内容到一个文件、查看多少行代码

    一.简单版: $ cat **/* > merge.fuck 二.结合find + xargs + cat版本: $ find ./ -iregex '.*\.\(js\|scss\|tpl\) ...

  2. 【剑道】日常练习相关Q&A 整理

    Q:如何使手腕灵活,手指灵活.有力量? A: 1)提重物.将手腕搁在膝盖上,凭手指和手腕的力量将重物提上来 2)指卧撑.用十个指头着地的方法做俯卧撑 Q:怎样才算肩膀放松,如何方式? A:收放自如,多 ...

  3. ELK logstash邮件报警

    这个方法有一个问题就是我这边不能给我们公司的邮箱发邮件.还有就是我们有两个邮箱一个是腾讯企业邮箱,还有一个就是我们的集团邮箱 使用下面的这个方法是不能给我们的集团邮箱发邮件的.第二个问题就是这个方法给 ...

  4. 关于Java Webproject中web.xml文件

    提及Java Webproject中web.xml文件无人不知,无人不识,呵呵呵:系统首页.servlet.filter.listener和设置session过期时限.张口就来,但是你见过该文件里的e ...

  5. 用“网建”平台发手机短信的C#代码

    一直都用这个平台发手机短信的,今天做新项目的时候用到了,但是上来博客搜索不到,只好翻以前的源代码翻了好久才找到了,先记下来,以作备用: using System; using System.Colle ...

  6. ubuntu for win10 里运行apache+php

    一直想试试ubuntu for win10中运行网站测试一下,弄了好久,今天终于基本弄明白了, ubuntu for win10里的IP就是外面WIN10的IP,在里面建立网站了可以直接在外面WIN1 ...

  7. sql中计算某天是全年的第几周及取得某天的所在周的周一的日期的函数

    --取得某天的所在周的周一的函数 CREATE FUNCTION getMondayBtDate(@date datetime) RETURNS date AS begin DECLARE @week ...

  8. mongodb学习比较(数据操作篇)

    1.  批量插入:     以数组的方式一次插入多个文档可以在单次TCP请求中完成,避免了多次请求中的额外开销.就数据传输量而言,批量插入的数据中仅包含一份消息头,而多次单条插入则会在每次插入数据时封 ...

  9. (原创)拨开迷雾见月明-剖析asio中的proactor模式(一)

    使用asio之前要先对它的设计思想有所了解,了解设计思想将有助于我们理解和应用asio.asio是基于proactor模式的,asio的proactor模式隐藏于大量的细节当中,要找到它的踪迹,往往有 ...

  10. 【MyBean调试笔记】关于单元的释放顺序

    [概述] DEMO提交人:惠商软件  2508696439 问题描述:MDIConsole, DEMO如果Forms单元引用顺序放在mybean.console.pas文件之后如下图所示时: 创建同一 ...