导读目录
1.为什么要用Git版本控制2.Git文件构造和存储原理3.GitFlow分支开发标准4.Git 常见问题和解决方案5.继续集成和麻利开发1.为什么要用Git版本控制以后的版本控制系统有以下几种:
Git是目前世界上最先进的分布式版本控制系统,应用Git和Gitlab搭建版本控制环境是当初互联网公司最风行的版本控制形式SVN TortoiseSVN是一款十分易于应用的跨平台的 版本控制/版本控制/源代码控制软件。HG Mercurial 是一种轻量级分布式版本控制系统,采纳 Python 语言实现,易于学习和应用,扩展性强。CVS 是版本控制系统,是源配置管理(SCM)的重要组成部分。SVN存在的缺点
Git的劣势1.Git把内容按元数据形式存储,hash存储形式, 每一次提交都是一个整个我的项目的镜像. 2.每个客户端的源,都能够作为clone对象.蕴含所有核心版本库的元素.
两者差别源于linux的一句话, 所有零碎皆为文件, svn右边, git左边. Git每次提交,都是一个对我的项目的 残缺快照.
[传送门]svn转Git治理教程2.Git文件构造和存储原理Git的文件构造当在一个新目录或已有目录执行 git init 时,Git 会创立一个 .git 目录。 这个目录蕴含了简直所有 Git 存储和操作的对象。
所有零碎都是有文件形成. 这些文件治理着 一个我的项目的版本.
Git存储构造Git的文件存储构造, 不失当的类比java中 hashMap的存储的(位桶数组+单向链表或红黑树) 桶链存储构造, 艰深的讲: 先用桶用分类规定.把一堆数据,装进筒子里,如下图所示.
Git的存储形式文件存储, 版本越多,存储信息越大, 运行也就越慢.
下图,是 一次commit产生的一棵树(一个快照).
只有文件内容雷同, 那么就是一个blob, (不论他的门路是否一样), Git的一次提交, commit信息会刷新,这次产生变动的文件的hash值,也就是blob, git应用hash值作为文件名,次要是为了比照差别,只有文件变了,那么该文件的hash值就会变,与老版本的文件名就不同,就能够据此断定有差别,这个信息会随着文件夹向上传递,也就催生了不同的tree蕴含这些不同的blob。
Emm…沿着思路想上来..
一个文件,批改后,内容变动了, 产生两个blob, 批改次数越多, blob 越多.内存占用越来越大?
git gc 理解一下….
Git 往磁盘保留对象时默认应用的格局叫涣散对象 (loose object) 格局。Git 时不时地将这些对象打包至一个叫 packfile 的二进制文件以节俭空间并提高效率。当仓库中有太多的涣散对象,或是手工调用 git gc 命令,或推送至近程服务器时,Git 都会这样做.
...