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. hdu 4908 BestCoder Sequence

    # include <stdio.h> # include <algorithm> using namespace std; int main() { int n,m,i,su ...

  2. 9. KNN和Sparse构图

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

  3. [HeadFirst-HTMLCSS入门][第九章盒模式]

    新属性 line-height 行间距 line-height: 1.6em; border 边框 属性值 solid 实线 double 双实线 groove 一个槽 outset 外凸 inset ...

  4. EffectiveC#11--选择foreach循环

    1.C#的foreach语句可以为你的任何集合产生最好的迭代代码 不推荐如下写法(?原因未明白 作者意思是阻碍jit边界检测) int len = foo.Length; for ( int inde ...

  5. css之浏览器初始化方案

    HTML, body, div, h1, h2, h3, h4, h5, h6, ul, ol, dl, li, dt, dd, p, blockquote,pre, form, fieldset, ...

  6. 关于arm-linux-gcc的安装与配置

    在嵌入式开发中我们经常会用到arm-linux-gcc来编译我们的应用程序.作为arm-linux-gcc的入门,我们先看看如何安装arm-linux-gcc. 安装arm-linux-gcc还是比较 ...

  7. 1230.2——iOS准备(阅读开发者文档时的笔记)

    1.程序启动的过程    .在桌面找到相应的应用的图标 点击图标    .main函数 UIApplication类Every app has exactly one instance of UIAp ...

  8. javascript版1024游戏源码

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. Ext JS中Button的一般使用

    Ext JS中Button按钮的显示,以及按钮的部分事件 一.属性 renderTo:将当前对象所生成的HTML对象存放在指定的对象中 text:得到按钮名称 minWidth:按钮最小宽度 hidd ...

  10. 50中制作图表的JS库

    参看以下链接:http://www.tuicool.com/articles/FZNjMz