Intro

版本号控制系统是什么
     版本号控制系统(Version Control System,VCS)能够帮助我们记录和跟踪项目中各文件内容的改动变化。它能够帮我们保存项目的各个版本号。以及改动原因,我们能够借用此工具回到项目以前的某个状态。除此之外,版本号控制系统也是帮助人员进行协作开发的利器。

Git是什么

     Git是一个分布式版本号控制系统(Distributed Version Control System,DVCS)。与传统的集中式版本号控制系统(如CVS、Subversion和ClearCase)相比,Git具有下面优势:
  • 分布式体系结构:能够全然断网工作,不受网络连接的限制
  • 分支与合并操作非常easy:创建分支简单、经济、高速,Git仅仅会保存与主干的差异,这与其它版本号控制系统不一样。

    Git把分支上全部修改合并回父分支,即使多次。也仅仅是一眨眼的功夫

  • 跟Subversion进行交互:Git能够从SubVersion的版本号库中导入全部的历史,并把你在Git中的修改发送回Subversion的版本号库

版本号库

     版本号库(Repository)是版本号控制系统用来存储全部历史数据的地方。大多数版本号控制系统在版本号库中存储各个文件的当前状态、历史改动时间、谁做的改动、以及改动的原因、还有改动的内容。
     常见的版本号控制系统能够分为两种类型。

一种是集中式版本号库(Centralized Repository),全部的程序猿都会把他们的改动提交到server上的一个公共版本号库。详细来说,每个程序猿在本地有一个工作文件夹树,其内容是该版本号库中最新的代码。

当他们在工作文件夹树中完毕代码的改动后。就把改动提交回该版本号库中。这样的方式有一定局限性,在本地工作文件夹树中。仅仅能看到代码的最新版本号。假设想查询历史改动记录,就必须与server上的版本号库打交道,就必需要使用网络。

假设没有网络,也无法记录当前已改动后的项目版本号。

     还有一种就是分布式版本号库(Distributed Repository)。使用分布式版本号控制系统,在本地就有自己的版本号库,全部的历史记录都会记录在本地的版本号库中,提交代码的时候不用连接到远程版本号库,而是记录在本地的版本号库中。git就是这种一种版本号控制系统。

那么git是如何将本地的改动上传到项目的主版本号库中的呢?有两种方式:1.
通过push操作直接把改动上传到主版本号库。2.生成包括少量改动的补丁包,把补丁包提交给项目维护人员。再由他更新主版本号库。


工作文件夹树

     工作文件夹树是版本号库的一个"断面视图"。它包含了开发该项目所须要的所有文件。包含源码文件、构建文件、单元測试文件等。
     在Git中,版本号库不在server上,而存储在本地工作文件夹树中的".git"文件夹中。工作文件夹树是怎么创建出来的呢?有两种方法。1. 用Git相关的命令初始化版本号库,也就是生成".git"文件夹。于是".git"文件夹的父文件夹就成了工作文件夹树。2. 克隆(Clone)一个已有的版本号库。也就连带创建了对应的工作文件夹树。

     克隆一个已有的版本号库,就是创建该版本号库的一个拷贝,并把版本号库中主分支(Master Branch)的内容检出(check out)到工作文件夹树。在Git中,检出是指把工作文件夹树更新,并使其内容与版本号库中某个特定的历史版本号同样。


代码改动与文件同步

     代码在修改之后。须要提交(commit)这些修改。每次提交操作都使得版本号库中新增一个版本号(Revision)

除了记录修改内容本身外。版本号库还记录修改的日志信息(log
message)
或称提交留言(commit message),这是代码的变动原因。

     我们在开发的过程中,有时须要将本地的修改共享。

为此,须要把变动推入(push)上游版本号库(upstream repository)

上游版本号库是一个公共版本号库。

     与push相反。我们也应该可以把公共版本号库中内容取到本地版本号库中来。须要两步操作。

第一步。把修改取来(Fetch),把远程版本号库中的版本号和分支拷贝到本地版本号库中。第二步。在本地版本号库中,把从远程版本号库里取来的修改与自己本地的修改合并(Merge)。一般来说,取来操作和合并操作总是先后运行的。因此,在Git中可以用一个命令完毕这两步操作:拖入(Pull)

     

标签

     标签以一个简单的名称(即标签名)来标记版本号库历史中某个特定的点。它能够是一个重要的里程碑,比方对外正式公布的版本号;也能够是相对普通的时间点。比方在修复一个缺陷后打个标签。

     本质上。标签是一个对于使用者来说易于理解易于记忆的名字。用来标识版本号库中一个难读难记的内部版本号号,以此帮助使用者跟踪版本号历史。

分支

     使用分支(branche)能够使你的项目有多条路径能够前进。下图展示了分支原理。主分支(Master Branch)是研发的主线,一些版本号控制工具也把主分支称作主干(trunk)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVHJveV9f/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

     分支很自由,分支后面能够合并到主分支上。也能够选择不合并。

甚至。你也能够把分支看成是还有一个主干。别人能够从你的分支上再拉取一个分支。


合并

     合并操作会把两条及两条以上的分支合并到一起。Git会比較各分支上的变化,确定变化在哪里发生、哪个文件的哪个位置。当不同的变化发生在文件的不同部分时,Git可以自己主动合并。但当发生在同一位置时。就会提示冲突,等待人工介入。而合并的全部操作会被Git所记录下来,便于以后能回归(revert)或者查看。


总结

     在本章中,介绍了Git中最核心的几个概念:版本号库、版本号、分支、合并。版本号库是项目的相关内容的容器,而版本号是项目在每一个时刻下的视图。分支、合并则为团队之间的协作提供支持。

Git(一):Git与版本号控制简单介绍的更多相关文章

  1. eclipse中使用git进行版本号控制

    协作开发的时候没有版本号控制是非常痛苦的事情,使用git能够非常好的完毕这项任务,由于非常多的开源码都在github上公布,因此学会使用git是非常重要的一项技能. 这篇写的是在eclipse下使用的 ...

  2. 云盘+Git GUI实现云盘文件版本号控制

    以下介绍操作细节 1.先下载Git GUI 下载地址:http://msysgit.github.io/       再下载百度云网盘 下载地址:http://pan.baidu.com 接下来就是安 ...

  3. Git版本号控制 为什么那么复杂 头大 (忍不住强烈吐槽)

    想把自己的源代码保存到云端.想到了用Github.com,然后便開始看怎么使用GIT. 一開始,没有接触之前,想的非常easy的.应该就跟SVN几乎相同吧.写好了提交就能够了. 只是使用了之后才发现根 ...

  4. 版本号控制-git(二)

    上次文章给大家介绍了Git的一些基本知识(http://www.cnblogs.com/jerehedu/p/4582398.html).并介绍了使用git init初始化化版本号库.使用git ad ...

  5. Git学习笔记1--Git原理简单介绍

    Git是一个分布式的版本号控制工具,假设想用github等版本号控制系统,核心就是git,以下简介一些git的基础原理,原文:http://git-scm.com/book/en/Getting-St ...

  6. Git的简单介绍

    每次看到别人写Git的文章,同学中也有用Git感觉很高大上的感觉,工作中用的是SVN,周末倒腾了一下Git,Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git 与 ...

  7. Git版本号控制:Git分支处理

    http://blog.csdn.net/pipisorry/article/details/46958699分支的意义创建分支能够避免提交代码后对主分支的影响,同一时候也使你有了相对独立的开发环境. ...

  8. Git版本号控制

        Git是分布式版本号控制系统.与SVN类似的集中化版本号控制系统相比.集中化版本号控制系统尽管可以令多个团队成员一起协作开发,但有时假设中央server宕机的话,谁也无法在宕机期间提交更新和协 ...

  9. Git简单介绍以及使用入门

    Git Git:分布式版本控制系统, 此外还有 SVN (集中式版本控制系统) 下载地址(阿里云镜像) :CNPM Binaries Mirror (npmmirror.com) Git Bash : ...

随机推荐

  1. [Javascript] property function && Enumeration

    var vehicle3 = { type: "Submarine", capacity: 8, storedAt: "Underwater Outpost", ...

  2. jquery selector

    jquery的选择器功能 1 :lt(index) selector 一组元素选择index之前的元素,若index<0 则倒着选过来 http://api.jquery.com/lt-sele ...

  3. JS操作URL

    function getQueStr(url, ref) //取获参数值 { ); ) { var arr = str.split('&'); for (i in arr) { ] == re ...

  4. HTML\Script 去除关键字

    以下是引用片段: ----- /**/ /// <summary> /// 去除HTML标记 /// </summary> /// <param name="N ...

  5. C#鼠标键盘钩子

    using System;using System.Collections.Generic; using System.Reflection; using System.Runtime.Interop ...

  6. javascript延迟加载及异步(defer和async)

    一直以来写代码的时候的常用习惯就是吧所有的js文件直接加载在文档的head标签里面,在写js文件的时候有时候获取一些文件对象的时候为空对象,这是由于文档结构还没有加载完,但是js文件已经加载完.也就是 ...

  7. Codeforces Round #277(Div 2) A、B、C、D、E题解

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud A. Calculating Function 水题,判个奇偶即可 #includ ...

  8. C++程序设计实践指导1.12数组中数据线性变换改写要求实现

    改写要求1:分别用指针pa.pb代替数组 改写要求2:从键盘输入data元素 元素个数任意,输入0结束 #include <cstdlib> #include <iostream&g ...

  9. 飘逸的python - 多条件排序及itemgetter的应用

    曾经客户端的同事用as写一大堆代码来排序,在得知python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣. 之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球,再相 ...

  10. 读php手册一点点心得(1)

    1.   要输出大段文本时,跳出PHP解析模式通常比将文本通过echo或print输出更有效率(手册) 2.   note :为了代码的发行及一致性,确保不要使用短标记,短标记仅通过php.ini配置 ...