git与svn的部分区别以及《pro git》部分章节读书笔记

来源:互联网 发布:hadoop yarn 源码下载 编辑:程序博客网 时间:2024/06/05 11:51
git 与svn 的区别:
     1.git是分布式的,而svn不是,git可以随时查看历史记录,创建分支,提交代码到本地,然后等有网络时再上传。而svn必须联网。git 可以像svn一样有自己的集中式版本库或者是服务器,但是更可以分布式的每个开发人员在自己的机器上克隆一个自己的版本库。
     2.svn 将原信息隐藏在一个类似.svn.cvs的文件上。.git的目录体积大小跟.svn差不多大。但是git是将整个代码版本库克隆在本地机器上。也就是将所有的tag,branch全都在本地机器上,而svn 就不可以,如果svn 想要切到另一个分支上去,就需要根据那个分支的地址重新clone对应分支代码。而git保留有所有分支信息,直接切换就可以切换为该分支的代码上去。
     3.显示用来标识版本快照的方式。
     svn有一个全局的版本号来作为相应时间的源代码快照。而git为了保证数据的完整性。在保存到git之前,所有数据要进行内容的教研和计算,并将此结果作为数据的唯一标识和索引。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察 觉。
     Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为 指纹字符串。该字串由 40 个十六进制字符(0-9 a-f)组成,看起来就像是:
     24b9da6552252987aa493b52f8696cd6d3b00373 
     Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库 中的东西都是用此哈希值来作索引的,而不是靠文件名。
     因此,他提交显示的版本号不能像svn一样用一个一直叠加的全局版本号来作为文件的索引。

     git 保存的不是文件差异或者变化量,而只是一系列文件快照.

     同时git提供了一种工具叫做 git svn 的Subversion双向桥接工具。该工具把Subversion服务的客户端,从而让你在本地享受git的所有功能,而后直接向Subversion服务器推送内容,仿佛在本地使用了Subversion客户端。

这里是用来借鉴和参考的其他同学的总结:
http://www.vaikan.com/5-fundamental-differences-between-git-svn/

http://blog.jobbole.com/20069/ 



git 的分支实现;
     首先在git创建出一个版本库的时候就会创建出一个叫做master的分支。而每次提交时候,会在git库中有几个对象: 几个文件对象。一个记录目录树内容及其各个文件对应的blob对象索引的tree对象。以及一个包含指向tree对象的索引和其他提交信息元数据的commit对象。并包含一个指向上次提交的一个指针。
     git中的分支,其本质是个指向commit对象的可变指针。每次提交,master指针会向前走一个。当创建一个新的branch的时候,会在当前master指向的commit对象上。
     而区分在哪个分支上进行工作的使用一个HEAD的特别指针指向那个branch指针。可以随意切换branch。而在不同分支上提交后就会使不同的branch指针指向的commit对象分道扬镳。直到branch合并起来

     git切换branch的时候,git会把工作目录的内容恢复为检出的某分支它所指向的那个commit的快照。它会自动添加,删除和修改文件以确保目录的内容和你上次提交时完全一致。

     git中四种主要的传输协议:本地传输,SSH协议,Git协议,和HTTP协议。
其中SSH是唯一一个便于读写操作的网络协议。也是一个验证授权的网络协议。如果在克隆的一个仓库的时候,没有指明是使用的那个协议,git会默认使用SSH协议。缺点是对于匿名访问是个很困难的事情。
     这里有GIthub中提供的关于远程url的使用(ssh 和 http)https://help.github.com/articles/which-remote-url-should-i-use/
以及对于两种方式的来回切换https://help.github.com/articles/changing-a-remote-s-url/     
关于如何生成ssh和如何添加到github账户中:https://help.github.com/articles/generating-ssh-keys/
0 0