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. Subsequence(两个单调队列)

    Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  2. 创建一个jQuery UI的垂直进度条效果

    日期:2013-9-24  来源:GBin1.com 在线演示 缺省的jQuery UI只有水平的进度条效果,没有垂直的进度条效果,仅仅重新定义JQuery UI的CSS不能解决这个问题. 这里我们扩 ...

  3. nodejs 批处理运行 app.js

    1.直接执行run.bat文件         以下的内容为批处理文件run.bat中的内容,批处理命令中NODE_PATH为Node.js的安装路径. 使用express 生成的项目.app.js为 ...

  4. 9. KNN和Sparse构图

    一.前言 图是一种重要的数据结构,本文主要表示图像的无向图.所谓无向图是指,图的节点间通过没有方向的边连接. 无向图的表示: 无向图G=<V,E>,其中: 1.V是非空集合,称为顶点集. ...

  5. ext.net中ComboBox空间实现模糊查询

    ComboBox中的属性添加Mode="Local"可以实现第一个字的模糊查询但是搜索中间的字无法实现 现提供一下方法使用正则表达式实现全模糊查询 <ext:ComboBox ...

  6. Funsion Charts 学习(二)

    下载FusionCharts 3.1网址为 http://www.onlinedown.net/soft/92224.htm 第一个demo 新建一个文件夹,命名为demo 在文件夹中新建一个两个文件 ...

  7. C#.NET 各种连接字符串

    C#.NET 各种连接字符串 近期连接数据库时,经常忘记连接字符串是如何的格式,现在此备注 此文章引用http://www.cnblogs.com/zhiqiang-imagine/archive/2 ...

  8. UIWindow & UIWindowLevel详解

    一.UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面.UIWindow在程序中主要起到三个作用: 1.作为容器 ...

  9. DataGridView常用功能

    最近做Winform开发,DataGridView是必不可少的控件.整理了一下用到的基本功能的设置 1.情景1:当GridView的列没有自动填充,会出现一片空白的地方,特别不美观. 设置 自动填充G ...

  10. MySQL 常用字段类型,介绍及其建表使用方法经验分享

    由于工作的公司没有专业的DBA又经常需要建立各种各种的表来满足自己的业务逻辑,所以经常查看MySQL 手册或者谷歌查看相关资料,所以本人就根据我的工作经验和相关资料来介绍一下MySQL各种字段类型及其 ...