Git 介绍
Git 是什么?
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds (Liunx 之父) 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git 的特点
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。(这意味这可以在本地开发而不需要联网,只需要在代码写好后联网上传代码)
下图是经典的git开发过程。
Git的功能特性
开发者角度 / 项目协助人员 | 主开发者角度 / 项目负责人 |
---|---|
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。 | 1、查看邮件或者通过其它方式查看一般开发者的提交状态 |
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。 | 2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。 |
3、在单机上自己创建的分支上提交代码 , 合并分支 , fetch服务器上最新版的代码,然后跟自己的主分支合并 | 3、向公共服务器提交结果,然后通知所有开发人员。 |
4、生成补丁(patch),把补丁发送给主开发者 | |
5、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。 | |
6、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。 |
Git 的优缺点
优点 | 缺点 |
---|---|
适合分布式开发,强调个体。 | 中文相关资料文档较少。 |
公共服务器压力和数据量都不会太大。 | 学习周期相对于新手而言比较长。 |
速度快、灵活。 | 不符合常规思维。 |
任意两个开发者之间可以很容易的解决冲突。 | 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。 |
离线工作。 | (B站曾被开源过一部分代码,虽然最后微软出手封掉了所有分支,但克隆到本地的代码却没办法制止) |
什么是版本控制系统
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
简单来说,版本控制就是用于追踪文件的变更,可能是一个或者是多个,他将更改的时间,更改人,更改内容记录下来,每一次文件的更改,项目的版本号都会增加,以便将来查阅特定版本修订情况得系统。
版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。
版本控制包括:检入检出控制、分支和合并、历史记录。
1.检入检出控制
软件开发人员对源文件的修改不能在软件配置库中进行,对源文件的修改依赖于基本的文件系统并在各自的工作空间下进行。为了方便软件开发,需要不同的软件开发人员组织各自的工作空间。
开发人员能够从库中取出对应项目的配置项进行修改,并检入到软件配置库中,对版本进行“升级”;配置管理人员可以确定多余配置项并删除。
同步控制的实质是版本的检入检出控制。检入就是把软件配置项从用户的工作环境存入到软件配置库的过程,检出就是把软件配置项从软件配置库中取出的过程。检人是检出的逆过程。同步控制可用来确保由不同的人并发执行的修改不会产生混乱。
简单来说,捡出文件的目的是为了获取修改的权限,对源码进行修改;捡入功能用于检入已检出的文件,检入文件(合并分支)后该文件的主版本会自动提升, 当其它用户尝试提取该文件时, 就会自动提取最新的版本。
注:该解释并非针对 :Git 中的检出(checkout)命令
2.分支和合并
版本分支(以一个已有分支的特定版本为起点,但是独立发展的版本序列)的人工方法就是从主版本——称为主干上拷贝一份,并做上标记。在实行了版本控制后,版本的分支也是一份拷贝,这时的拷贝过程和标记动作由版本控制系统完成。版本合并(来自不同分支的两个版本合并为其中一个分支的新版本)有两种途径,一是将版本A的内容附加到版本B中;另一种是合并版本A和版本B的内容,形成新的版本C。
3.历史记录
版本的历史记录有助于对软件配置项进行审核,有助于追踪问题的来源。历史记录包括版本号、版本修改时间、版本修改者、版本修改描述等最基本的内容,还可以有其他一些辅助性内容,比如版本的文件大小和读写属性。
开发人员可以根据历史记录和版本号对仓库进行回滚和检查历史修改;
Git Hub 是什么?
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持 git 作为唯一的版本库格式进行托管,故名GitHub。
Github是全球最大的编程社区及代码托管网站,由于程序员多数为男性,所以还被戏称“全球最大的同性交友平台”。
Github可以托管各种git库,并提供了仓库管理系统,和一个用于介绍项目的web页面(Git hub pages);
GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。
2018年6月4日,微软宣布,通过75亿美元的股票交易收购代码托管平台GitHub。
Git 与 Git Hub 的关系?
Git 与 Git Hub的关系准确的来讲,其实是两码事,包括 Git Lab, 码云其实都是依赖于 Git 的版本库托管平台;(由于篇幅原因,本次暂不介绍Git Lab和码云!);
Git是基于本地仓库的版本控制系统,Github是基于Git在Web端的在线代码托管服务。
Git是应用程序,它可以管理本地的代码仓库,你写的代码的各个版本都可以存放在本地仓库;
Git Hub是网上仓库,你可以将代码远程存放到GitHub服务器中;