理解git

为了真正了解git,我们从底部、底层开始,了解git核心,知其然并知其所以然。

为什么要进行版本控制呢? 因为编写文件不可能一次到位,文件总是有不同的状态需要保存下来,方便以后出错回滚。

git 是目前最先进的版本控制软件(VCS,version control system),它是linux之父Linus Torvalds的第二个作品。

正如git所命名的那样,是“愚蠢或不开心的人”,Linus评价“git is a British English slang for a stupid or unpleasant person.”

而且他认为git是一个简化的文件系统,版本控制只是它的一个功能,并不是全部。“In mang ways you can just see git as a filesystem-it’s content –addressable,and it has a notion of versioning ,but I really designed it coming at the problem from the viewpoint of a filesystem person(hey,kernels is what I do),and I actually have absolutely zero interest in creating a traditional SCM system.”

VCS的主要发展进程: CVS(Concurrent Version System)---SVN(subversion)--git

“Git is at it’s heart very stupid simple.”底层简单,但抓住了本质,功能强大

一个简化的文件系统,文件只保存一份,传统的是两份

/c/user:可以看到省去了冒号

pwd:在Linux层次结构中,想要知道当前所处的目录,可以用pwd命令,该命令显示整个路径名。

git –version 显示版本,说明已经安装好

inux中 ls-ltr:对输出文件进行各种排序;

按照字符序(default): #ls -l

按照修改时间排序: #ls -t //最近修改在最上面

逆排序 : #ls –r

ls 命令将每个由 Directory 参数指定的目录或者每个由 File 参数指定的名称写到标准输出,以及您所要求的和标志一起的其它信息。如果不指定 File 或 Directory 参数, ls 命令显示当前目录的内容。

传统的CVS,SVN的储存如下图所示:

若想取得版本四的所有文件:

A+点他1+点他2

B+点他1

C+点他1+点他2

节省了磁盘空间,加大了计算量,性能下降

snapshot

n.      (快照) 照片,独立的印象,简单印象; 简介; 急射,速射;

vt.    给…拍快照;

vt.    拍快照;

A1,A2等都是独立的文件

恰恰相反,这种方式是高效的,为了节省磁盘空间,用zip压缩

Version3,A1不变,保存个指针指向A1,牺牲磁盘上的开销,提高了性能

Metadata:元数据  包括三个方面:内容(字节序列),文件名name,大小size,(访问权限等)

创建文件非常简单 ,复制后改变文件名,在磁盘上存的是两个文件,这显然不是一种很好的存储方式。可不可以一个文件取两个名字?提到这是为了以后说明git和文件系统的区别。

File version 文件版本:对文件后进行修改,变成第二个状态,第二个文件版本。希望两种状态都保存下来,方便回溯。如果没有的话,总是需要clone,很麻烦。

同一个文件,多种状态,如何保存?

多种状态,有很多内容重复。保存f1,保存f2与f1的区别、(差、变化)(svn),类似f3与f2的差

F1,f2都保存下来(git,很傻、拙劣的一种方式,但有它背景,磁盘越来越便宜,带来了很多优点,在实践中是一种很优秀的方法)

Hash:哈希 输入是一个文件,经过一个函数变化,产生一个固定长度的字节fixed length

主要流行的两种:MD5,渐渐淘汰,一个(山东,清华女)教授破解了它;SHA1,20个byte,160个bit,理解为文件的指纹。文件变化,指纹也发生了的变化。单向的,难以从字节反推出文件

创建一个git.txt

sha1  git.txt  会得到20个字节

改动git

Sha1 git.txt  20个字节改变

(1)安装

git安装之类的十分简单,具体过程我们不再赘述,直接进行应用。

查看git版本,验证git已经成功安装:

(2)git初始化

在d:/temp/gitdemo/aaa下创建一个文件main.c,并将目录aaa作为git仓库:

(可以用mkdir先将目录建立出来)

在main.c中编辑内容

所有 git 需要的数据和资源都存放在.git目录中

(3)配置用户名和密码

每次git提交都会使用该信息,因为传递了 --global 选项,所以git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。

Git有三种配置

在.git目录下有config文件,

时间: 2024-10-21 13:27:01

理解git的相关文章

理解git常用命令原理

git不同于类似SVN这种版本管理系统,虽然熟悉常用的操作就可以满足大部分需求,但为了在遇到麻烦时不至于靠蛮力去尝试,了解git的原理还是很有必要. 文件 通过git管理的文件版本信息全部存放在根目录.git下,稍微看下: $ ls .git COMMIT_EDITMSG HEAD branches description index logs packed-refs FETCH_HEAD ORIG_HEAD config hooks info objects refs git除了提供给我们平时

彻底理解Git

Translated from http://maryrosecook.com/blog/post/git-from-the-inside-out. 本文原地址:https://github.com/pysnow530/git-from-the-inside-out/blob/master/README.md 彻底理解Git 本文主要解释git的工作原理.如果你是一个视频党,请移步youtube视频. 本文假设你已经了解Git,并可以使用它来对项目做版本控制.我们主要考察支撑Git的图结构和指导

使用git微命令深入理解git工作机制

首先,这篇不是真正意义上的翻译,所以大家在看的时候不要找对应的英文文章对应着看.这篇文章之所以归类为翻译,是因为最开始有一篇英文文章让我对git内部机制有了清楚的认识,它可以说是我git的启蒙老师吧.然后很久过去后,自己也有了很多的git项目实践,觉得有必要从自己的理解角度(微命令和常用命令对应分析)来整理下自己的理解,于是有了这篇博文. git是一种管理数据的工具,一种支持快速索引查找数据并管理数据变化的工具.它为数据添加一个头封装为对象块(本文称为git对象)然后保存为文件,并根据数据生成一

全面理解 git

正文 1.Git简介 Git的诞生确实是一个有趣的故事,我们知道,当年Linus创建了开源的Linux,从此,Linux系统不断发展,现在已经成为最大的服务器系统软件了.(请不要傻傻分不清Linus和Linux) 但是随着Linux的不断壮大,就需要各种版本控制了,起初Linus带着他的小弟们使用的是BitKeeper(商业版本控制系统),之后呢由于某种原因BitKeeper的公司不让他们使用了,于是Linus自己花了两周时间写出了Git并且开源了(BitKeeper已哭晕在厕所),阿弥陀佛,幸

Git暂存区之理解Git暂存区(stage)

前一篇blog在实践过程有意无意地透漏了"暂存区"的概念.为了避免用户被新概念吓坏,在暂存区出现的地方又同时使用了"提交任务"这一更易理解的概念,但是暂存区(称为stage或index)才是其真正的名称. 在版本库 .git 目录下有一个index文件,下面针对这个文件做一个有趣的试验.具体操作步骤如下: 1. 首先执行 git checkout 命令(后面再介绍此命令),撤销工作区中 welcome.txt 文件尚未提交的修改. $ git checkout --

git plumbing 更加底层命令解析-深入理解GIT

原文: http://rypress.com/tutorials/git/plumbing 本文详细介绍GIT Plumbing--更加底层的git命令,你将会对git在内部是如何管理和呈现一个项目repo有一个深入的理解. 除非你想通读Git源代码,你可能永远没有必要使用下面的命令.但是通过手工的操作一个repo将会让你对于GIT如何保存数据的概念细节有个深入理解,你也将对于git是如何工作的有更好的理解. 我们首先来检阅Git的object database,然后我们使用git的低级命令手工

理解 Git

Git 如何保存文件 其它版本管理系统通常会保存所有文件及其历次提交的差异(diff / revision),通过 merge 原始文件与各阶段的差异就能获取任何版本的状态 而 Git 保存的是每一次提交时所有文件的快照(snapshot),对于发生改变(modified)的文件会生成新的快照,而对于未发生改变的文件,其新版本快照为上一个版本的快照的索引(图中虚线框所示),这样可以减小版本库的体积 这里比较费解的是:快照究竟是什么? 简单的理解:快照就是压缩文件,只不过 git 会将文件内容压缩

使用plumbing命令来深入理解git add和git commit的工作原理

前言: plumbing命令 和 porcelain命令 git中的命令分为plumbing命令和porcelain命令: porcelain命令就是我们常用的git add,git commit等命令 plumbing命令可以理解为更底层的命令,实际上一个porcelain命令可以由若干个plumbing命令完成(见下文),plumbing命令可以帮助我们了解git底层的工作原理 阅读本文还需要了解.git目录的结构功能,以及git中的对象(commit对象.tree对象.blob对象等等)等

如何理解git checkout -- file和git reset HEAD -- file

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000 首先需要知道工作区(working diretory)和暂存区(Stage)这两个概念.工作区的该概念不仅包含你实际操作.更改的文件还应当包括当前修改但未add存入暂存区的文件变化信息,暂存区的作用则是临时存储文件的变化信息,在gi