Git基础

这次开发要使用Git取代SVN。借机学习了一二,跟大家分享一下。

Git简单介绍

一句话总结的说,Git是一个开源的分布式版本号控制系统,由Linux内核开发者开发,现已用来管理android等多个大型项目。

设计目标:

  • 高速操作
  • 简单设计
  • 并行开发(上千个)
  • 全然分布式
  • 能力超强(类似Linux内核管理)

和SVN

提到版本号管理系统,自然会想到SVN,假设你原来是使用tortoiseSVN操作,你如今能够用tortoiseGit。表面上看。你会发现tortoiseGit除了多了几个诸如Push、Pull等命令外,其他基本一致。

当然。这仅仅是表面。

单从tortoise这个工具来说,tortoiseSVN内嵌了SVN的命令;而tortoiseGit仅仅是个“皮”。负责调用Git的各个命令,这也是在安装tortoiseGit之前要安装Git的原因。

再进一步的说,SVN是集中式的版本号控制系统,Git是分布式的版本号控制系统,分布式和集中式的区别还是非常大的:

  • 分布式弱化了集中。强调了“库-库”平等
  • 分布式意味着每一个人在本地都能够有一个完整的库
  • 有完整的库意味着每一个人都是一个备份,丢失更easy回复(这也意味着代码easy全盘泄露)
  • 有完整的库意味着你大部分操作能够离线操作
  • 离线操作意味着速度更快,不用依赖网络
  • ……

虽有不同,好在Git能够兼容SVN,你能够用Git导入SVN库再使用Git,也能够直接使用Git操作SVN库。

原理

完整性机制

保存到Git中的内容,都要进行校验和计算,形成该文件的唯一标识。使用的是SHA-1算法。

在Git中,全部保存在Git中的内容都是用此哈希码作为索引的,所以在有关Git的操作中。常常见到此类“指纹”:

24b9da6552252987aa493b52f8696cd6d3b00373

对象机制

首先来看一下Git模型设计的一些基本概念:Git设计了几种对象模型。每种对象主要包括了size。type和content。

Git中有下面四种主要对象:

1. blob: 用于存储数据,一般来说就是文件

2. tree: 与文件夹非常像,保存的是对其他tree、blod的引用

3. commit:指向一个特定的tree,并记录相关的时间、描写叙述等信息

4. tag: tag指向一个特定的commit。它像分支引用,但不会变化

这几种对象的关系例如以下图所看到的:

通过这几种对象,Git能够非常有条理的管理内容和版本号。

存储机制

SVN和Git另一个非常大的差异在于二者的存储机制,曾经写过一篇关于SVN 的博客提到,SVN是增量保存的,及每次仅仅保存和上次有差异的部分,例如以下图:

这样做的优点是能够非常大程度上节省硬盘空间。但假设要得到指定版本号的文件都要先找到近期的快照,然后合并上改变的部分,所以速度较慢,来看一下Git的存储机制:

Git的存储机制是假设文件有变化。那么就直接再保存一个该文件完整的版本号,这样的做法的不足之处也显而易见。就是须要很多其它的硬盘空间;可是优点也非常明显:得到指定版本号是瞬时的,而且这样的机制对于分支、合并的管理非常易操作。

这是一种以空间换效率的方式,大智若愚。

分支原理

在Git中分支和合并异常轻量级的,所以Git鼓舞开发人员多使用分支和合并。分支和合并的使用时Git非常重要的一部分,本文仅作简介,抛砖引玉,详见《Pro Git》

由上面提到的对象机制和存储机制。能够知道在Git中。多次提交commit后,仓库变为:

而分支即是指向这些commit的指针文件,这个文件就是包括对象校验和(就是上面提到40字节的SHA-1子串)的文件,所谓的新建分支不过向一个文件增加41个字节(另一个自己的换行符)。所以在Git中新建分支很高速而且便宜。

使用流程

由于Git的机制不同,导致它的操作更灵活,这也促使了很多其它灵活的管理方式。依据项目大小一般有三种:

集中式工作流

它是将代码存放在中心server。能够接受全部开发人员代码,这样的工作流与SVN时的思想一致,适合较小的项目:

集成管理员工作流

Git支持每一个开发者都有自己的远程库。因此能够让官方有一个主库,每一个开发者有一个远程仓库,开发者向自己的库中更新内容,官方管理员负责收集、选择、整合这些更新到主库:

GitHub上採用最多的就是这样的工作流。

司令官与副官工作流

这个是在集成管理员工作流的基础上改进的,一般很大的项目才会使用。如linux内核开发。这样的工作流的核心是在集成管理员工作流的基础上加入了一个超级管理员和若干个管理员。即:多个管理员负责从开发人员的远程仓库中收集、选择、整合更新的内容到自己负责的主仓库中,再由超级管理员对管理员集成的内容二次筛选,整合到主库中:

总结

关于Git的内容就讲到这里,并非说Git比SVN更好。没有哪种版本号管理更好,也没有哪种工作流程更好,依据当前环境,合适的才是最好的。

Git基础操作

《Pro Git》

《Git使用手冊》

时间: 2024-08-02 06:58:19

Git基础的相关文章

Gi之(二)Git基础命令

三个工作区域 使用Git之前,首先要弄清Git的三个管理区域,有助于理解Git的运行原理,以及每个Git命令对文件造成的影响. 对于任何一个文件,在本地的Git内部都有三种状态: l   已修改(modified) 表示修改了某个文件,但还没有提交保存.包括新增.删除了一个文件,也属于已修改状态的一种. l   已暂存(staged) 表示把已修改的文件放到了暂存区,也就是放到了下次提交时的清单中. l   已提交(committed) 表示该文件已经被安全地保存在本地数据库中了. 三种状态对应

git基础及分支

关于版本控制 git是一种分布版本控制系统,每一主机都保存了完整副本.必杀技是分支. 在Windows可安装git客户端msysgit. git基础 第一次看progit觉得有点不懂,不懂版本控制,一条条命令写的觉得很麻烦没头绪.这次在看了向导guides.github.com之后,文章避免了一些细枝末节的命令,而是介绍工作流程,懂了一点工作大概流程再开始使用命令比较合适. 三种状态 工作目录.暂存区域.git目录 工作目录就是你打开文件夹看到可见目录.暂存区域含有添加(add)之后的文件.gi

Git基础知识(二)

前言 本篇是Git基础知识(一)的延续,由于篇幅原因,分成两篇. 我们重新建立一个文件夹,执行git init. 添加一个有三行aaaaa内容的git.txt文件,并commit. 分支 截止目前,我们都是在一个叫做master的分支上工作.Git允许我们创建分支去做一些其他的事儿,而不影响到你的master分支. 1. branch branch命令可以查看分支.创建分支以及删除分支. a. 查看分支 git branch 可以看到我们当前只有一个分支master,也叫主分支,*号代表当前所在

Git详解之二 Git基础

来自:http://www.open-open.com/lib/view/open1328069733264.html Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置:开始或停止跟踪某些文件:暂存或提交某些更 新.我们还会展示如何让 Git 忽略某些文件,或是名称符合特定模式的文件:如何既快且容易地撤消犯下的小错误:如何浏览项目的更新历史,查看某

git基础一

git基础学习 git客户端,git服务器 1.通过git命令,在本地创建仓库 该仓库可上传到服务器,进行git管理 使用git init等语句 2.将服务器创建的仓库克隆到本地 在服务器中创建仓库,使用clone将仓库克隆到本地 github是基于git的代码托管平台,用户可以建立公共仓库,(公共仓库,代码开源),通过客户端将代码上传到仓库: 问题: 1. 客户端安装? 2. 客户端如何连接到github仓库? 3. 客户端如何与仓库交互,比如获取仓库文件,提交,建立分支等? ××××××××

Git详解之二:Git基础

原文:<Pro Git> Git 基础 读完本章你就能上手使用 Git 了(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读).本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置:开始或停止跟踪某些文件:暂存或提交某些更 新.我们还会展示如何让 Git 忽略某些文件,或是名称符合特定模式的文件:如何既快且容易地撤消犯下的小错误:如何浏览项目的更新历史,查看某两次更新之间的差

git基础知识

本文没啥难度,基本上是我照着廖雪峰的博客敲的代码,权当做篇学习笔记. git基础知识 git diff example.txt git add example.txt git commit -m 'addby XXXX' git status git log[--pretty=online]     windows上安装git客户端,到官网下载即可. 安装完成后,在开始--> GitBash ,输入下面的内容: git config --global user.name'lirl' git co

Git基础操作

配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a directory 2.如果没有就创建新的秘钥 $ ssh-keygen -t rsa -C "注册Github用的邮箱" $ ssh-keygen -t rsa -C "注册Github用的邮箱" 按照提示一路输入即可. ssh-keygen -t rsa -C &q

【git学习二】git基础之git管理本地项目

1.背景 git基础打算分两部分来说,一部分是对于本地项目的管理,第二部分是对于远程代码仓库的操作.git执行本地项目管理包括对于相关文件的追踪,暂存区的比较分析,提交,撤销等功能. 2.本地项目管理 首先mkdir一个文件夹,叫做GitTestFile,然后执行下面代码,创建git的管理配置 git init 接着加入如下代码,git add . ,把项目加入跟踪队列 git add . 可以用git status查看状态 加入readme文件,vim readme.txt .输入git st