git(一):git简介
git(一):git简介
http://www.bootcss.com/p/git-guide/
http://backlogtool.com/git-guide/cn/
http://www.01happy.com/centos-6-5-install-gitlab/
http://www.jifang360.com/news/20151230/n036576405.html
http://dockone.io/article/916?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
http://toutiao.com/i6298420366918287874/
http://www.wtoutiao.com/p/h69gEw.html
https://linux.cn/article-5418-2.html
https://www.runoob.com/git/git-tutorial.html
1 简介
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
1.1 功能
从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
1.2 SVN与Git的区别
Svn版本控制系统工作流程如下:
1、在中央库上创建或从主干复制一个分支。
2、从中央库check out这个分支代码。
3、增加自己的代码文件,修改现存的代码或者删除代码文件。
4、commit代码,假设有人在分支上提交了代码,你就会被提示代码过期。
你需要先UP代码后在提交。UP代码出现冲突,需要选解决冲突再进行提交。
缺点:当无法连接中央版本库的环境下,你无法提交代码,将代码加入版本控制;无法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码,我们都默认通过自测可以运行的,如果某个模块的代码比较复杂,不能短时间实现为可测试的功能,那么你需要等很久的时间才嫩提交自己的代码,由于对代码库集中管理,需要对中央代码库的存储进行备份。分布式的版本控制系统要好一些。
git分布式版本控制
git是linus开发的,所以和linux文件系统结合的更紧密些,以至于在windows需要cygwin才能使其完美工作。
git没有了中央版本库的说法,但是为了开发小组的代码小组的代码共享,我们通常还是会搭建一个远程的git仓库。
和svn不同的是,开发者本地包含一个完整的git仓库,从某种程度上说本地的仓库和远程的仓库在身份上是等价的,没有主从之分。
如果你的项目是闭源项目,或者你习惯于以往的集中式管理模式的话,那么在git下你也能像svn一样工作,那么流程上增加一些步骤。
1、本地创建一个git库,并将其add到远程的git库中。
2、在本地添加或者删除文件,然后commit,当然commit操作都是提交到本地的git库中。(其实是提交到git目录的objects目录里)。
3、将本地git库的分支push到远程的git库分支上,如果远程的git库已经有别人push过了,那么远程的git库不允许你push,你需要先pull,然后如果有冲突,处理好冲突,commit到本地的git库后,再push到远程git库。
1.3 优缺点
优点:
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
离线工作。
缺点:
资料少(起码中文资料很少)。
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。