基本概念

基本概念


Version Control System (版本控制系统)

版本控制的好处
1. 开发者同步进行开发
2. 不会覆盖别人的修改
3. 管理历史的每一个版本
版本控制的种类
1. Centralized version control system(CVCS),集中版本管理器
2. Distributed/Decentralized version control system(DVCS),分布式版本管理器
分布式版本管理器(Distributed Version Control System)
1. CVCS用一个中央服务器去存储所有的文件和管理这些文件,一旦该节点发生了故障,那么整个CVCS便不可用
2. 如果中央服务器没有使用备份且出现了故障,那么所有的历史项目将全部失去,因此u出现了分布式管理器
3. DVCS并不是在目录中保存最新的文件快照,但是仍镜像了整个库。
4. 在DVCS中如果服务器出现了故障,那么资源库可以从其他的客户端中获取一个备份,重新存储到服务器中。每一次的checkout都是一个完整的文件备份。Git并不依赖于中央服务器,这就是为什么你的任何工作可以基于本地的运行
5. 在DVCS中你可以在本地进行提交,修改,创建新的分支,查看历史日志,或者是进行其他的操作
6. 当你有的网络的时候你只需要将你的修改发布出去并且获取最新的修改即可
Git的优势
1. 开源:Git的发布是基于GPL的开源许可证。你可以按照你的需求对源代码进行修改添加你自己的需求
2. 小而快:大都数的操作都是本地的,这大大的提高了运行的效率。Git不依赖于任何的中央服务器;这就是为什么不需要对于每一个操作都需要和远程的服务器进行交互。Git的核心代码是由C写的,C语言提供了异于其他语言的高性能,尽管Git镜像了整个资源库,但是在客户端的数据是非常小的
3. 隐式的备份:丢失数据的修改是非常罕见的当有多个备份
4. 安全:Git使用了SHA1的加密hash函数,这使得对于修改文件,日期,提交信息或者任何形式的修改Git中的文件都是不可能的
5. 不需要高性能的硬件支撑:以CVCS为例,中央服务器需要强大性能来处理来自客户端团队的请求,对于小的团队这不是什么问题,但是对于有一定规模的对于,要处理庞大的请求是中央服务器的一个瓶颈。但是在DVCS中,除了向服务器提交和拉取新的修改需要交互,其他任何的命令都是很少和服务器进行交互,这大大减少了与服务器的负载
6. 更简单的分支:CVCS使用了一个非常轻量级的复制机制。如果我们创建了一个新的分支,Git会将所有的文件拷贝到新的分支,这就导致了时间的成本。而且在CVCS中合并和删除分支也是非常复杂和耗时的。但是Git的分支管理是非常简单的,只需要几秒就可以创建,删除,合并分支
DVCS术语
1. 本地仓库:每一个VCS(Version Control System)工具,提供一个私有的工作空间作为一个工作备份,开发者们可以在提交前在本地的工作空间中作修改,这些修改也是作为仓库的一部分。Git提供了多种方式让用户对仓库进行操作,如add file,remove file,rename file, move file, commit changes, and many等
2. 工作目录和讲台空间(索引):工作目录是文件的提交的地方。在其他的CVCS中,用户对文件的修改提交是直接对中央服务器进行操作。但是在Git中,使用了另一种的策略。Git并不会跟踪每每一个修改的文件。当你做提交的操作时,Git会查看在staging区域中的文件。只有在staging区域中的文件或者是被修改的文件才会被提交.我们来看一个比较简单的流程Step 1:你在工作目录中修改了一个文件;Step 2:你将这些修改的文件添加到了staging区域中;Step 3:你进行了提交的操作,使用了push操作后,你对文件的修改将永久的存储在Git的仓库中
3. Blobs:Bolbs的意思是二进制大对象,每一个文件的版本都被表示为一个blob。每一个blob都有file的数据,但是不包含任何元数据。blob是一个二进制的文件在Git的数据库中,通过SHA1 hash函数作为文件的命名方式。在Git中,文件并不是通过名字来进行定位。
4. Trees:树是一个对象,代表着一个目录结构。Tress用来管理blobs及其子目录,一个tree也是一个二进制文件,Trees的名字同时也是通过SHA1函数进行的命名映射
5. Commits:提交是最新的仓库中的stage。一个Commit也是通过SHA1 hash函数进行的命名。可以将commit对象考虑成一个含有多个结点的链表。每一次的提交都有一个指针指向当前的提交。你也可以查看历史。如果一个提交含有两个以上的父节点,那么这个节点肯定是通过merge操作得到的
6. Branches:分支是用来创建另一条软件开发生产线。默认的情况下,Git有一个master branch,在子版本管理系统中也是存在一个master branch。通常情况下,一个branch是用来开发一个心的功能feature。一旦一个feature完成了,那么应该将它和master branch进行合并,同时删除分支,HEAD指针是用来指向最新的一次commit。无论你做了多少HEAD总是指向你的最新的commit
7. Tags:Tags是用来给版本一个有意义的名字,Tags和branch很相似,但是区别在于Tags是不可变的。这就意味着,Tag是一个分支,并且没有任何人打算再去修改它。一旦tag用于标记了一个commit,即使你创建了一个新的commit,tag也不会被自动的更新。通常tag用来给开发者发布自己的产品
8. Clone:Clone操作用来创建一个repository的实例
9. Pull
10. Push
11. HEAD
12. Revision
13. URL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值