《Pro Git》 简略阅读笔记

本文详细介绍了Git版本控制系统的概念、特点及基本命令。重点讲述了分支的使用,包括创建、合并和衍合操作。此外,还涉及了远程仓库的使用、配置和内部原理。

第一章 起步


首先是版本控制的概念。有本地的、集中式、分布式这集中。Git属于分布式的。扯了下Git的历史。Linux内核开发,当时使用BitKeeper公司的分布式系统,但是后来公司收回了免费使用的权力。所以就迫使Linux开源社区的人们开发一套自己的版本控制系统。

Git的主要特点有这些:

1.直接快照,而非保存差异。所谓的快照,是对文件进行SHA-1算法计算数据的校验和,将这个40位的字符串作为这个文件的数据指纹,以后查找也是通过这个哈希值来建立索引。

2.近乎所有操作都可以本地执行。其他的版本控制系统(VCS,Vesion Control System),基本都是需要在联网状态下才可以使用。但是Git不需要。因为Git保存了整个的历史更新,所以可以在本地操作,然后等到有网络的时候,再将它push到服务器上即可。而且这个也跟Git的分支的性能有关。Git支持分支,每个人可以在自己的分支上进行处理,再合并。

3.时刻保持数据的完整性。这个跟上面第一点讲的数据指纹一样。如果文件发生改变,那么它的数据指纹就不一样,以此来判断是否在存盘、传输等过程中出错。

4.Git做的大部分都是添加的操作。而其他的一些操作,如删除等,要回退就很困难了。

对于里面的文件,有三种状态:

已提交(commited),已修改(modified),已暂存(staged)。

这三个状态在后续的章节后会有说明,可以再看。


============================================================================

第二章 Git 基础


这一章主要是一些基本命令的介绍。

#初始:
$ git init

#添加到提交。也就是将已修改的东西保存到已暂存。

$ git add *.c

#也可以是添加新文件的跟踪

$ git add README

#提交,后面的-m,是对这次提交的注释

$ git commit -m 'initial project version'

#查看当前的状态,有哪些文件是修改了的啊之类的

$ git status

#编辑一些可以忽略的文件模式
.gitignore 的文件,列出要忽略的文件模式

#查看文件的不同
$ git diff

#查看当前是在哪个分支
$ git branch

#切换到master这个分支上

$ git checkout master

#将master上的获取下来

$ git pull origin master

#相对应,push上去

$ git push origin master

#重命名

$ git mv README.txt README

#删除
$ git rm grit.gemspec

#查看提交日志
$ git log

#当然,还有可视化的提交情况查询工具 gitk

#撤销掉上一次的提交

$ git commit --amend

#这次不提交这个文件
$ git reset HEAD benchmarks.rb

#撤销对这个文件的修改
$ git checkout -- benchmarks.rb

还有远程仓库的使用啊,别名啊,标签啊这些,暂时木有接触到,所以先不管了...


=======================================================================

第三章 分支

这章才是重点啊。还好这本书的图都形象。

有人称Git的分支是“必杀技特性”(英文是killer feature),正是由于它,才将Git从版本控制的家族中区分出来。Git鼓励频繁使用分支。

一次提交后,示意图如下:

可以看到,是有个tree这样的结构来存储,tree里面包含了三个blob,对应三个文件。而且可以看到,都是使用数据指纹来表示这个文件。

而分支呢,就像下面的图,有master,testing两个,HEAD是指明当前是在那个分支上来操作。

上面的情况,只是一个推进,这时候,如果需要将testing和master合并的话,只需将master向前推进即可,这个是没有冲突的。

如果是两个分支朝不同的方向发展,那么合并他们的时候就会出现问题。如下图所示:

一种情况是,没有冲突的合并,那么可以直接在后面新建一个文件版本,然后自动把这两分支合并起来。如果是有冲突的话,那么系统会有提示,需要手工进行合并,并反馈合并完成,系统才会完成合并。

合并使用的命令如下:

$ git checkout master
$ git merge iss53

相比于合并,还有一种叫衍合的操作。

初始的情况如下:


如果是进行合并操作的示意:

如果是进行衍合操作的示意:

衍合直接把变更C3’,放到C4后面,这样子,在查看版本历史的时候,就方便得多,也清晰得都多。

但是衍合也需小心,不然会很麻烦。像上面的例子,它是智能改变了一些commit,如上面,C3不见了,增加了C3‘。这样人家进行处理,会很奇怪,很再次对C3‘进行处理,因为两者的数据指纹不一样。但其实里面的内容会有很多重复,造成混乱。

书上对衍合的建议是:

“永远不要衍合那些已经推送到公共仓库的更新。”

英文版是:“Do not rebase commits that you have pushed to a public repository.”

对于分支,可以有长期分支,特性分支等功能。比如在WS,就有一个master,是基本的,然后针对不同的项目,有不同的分支,西班牙一个,imx一个,这样互相分开。

书上还举了其他一些例子,比如一个是稳定版本,一个是开发版本,一个是试验性的创造等等。由于分支可以合并、衍合等,所以可以方便进行版本变更。


===============================================================

第四-八章

木有怎么看。主要是架设,配置等等。。pass



===============================================================

第九章 Git内部原理


这张挺牛逼的感觉,但是木有怎么看懂。

摘抄其中的一句话:

”从根本上来讲 Git 是一套内容寻址 (content-addressable) 文件系统,在此之上提供了一个 VCS 用户界面。“







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值