一、Git 概述
1、Git 是什么?
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
项目官网:https://git-scm.com//
2、那什么是版本控制系统?
如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:
想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:
过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。
看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。
更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给她(也可能通过Email发送一份给她),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给她之后到你收到她的文件期间,你作了哪些改动,得把你的改动和她的部分合并,真困难。
于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
这个软件用起来就应该像这个样子,能记录每次文件的改动:
版本 | 用户 | 说明 | 日期 |
---|---|---|---|
1 | 张三 | 删除了软件服务条款5 | 7/12 10:38 |
2 | 张三 | 增加了License人数限制 | 7/12 18:09 |
3 | 李四 | 财务部门调整了合同金额 | 7/13 9:51 |
4 | 张三 | 延长了免费升级周期 | 7/14 15:17 |
这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。
GIT可以对WORD的内容进行解析吗?
所有的版本控制都只能针对文本内容,像word这样的二进制内容,所谓版本,就是文件快照,不能比较差异,只能算带备份的网盘
3、集中式vs分布式
Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?
先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
那分布式版本控制系统与集中式版本控制系统有何不同呢?
首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。
既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?
比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。
CVS作为最早的开源而且免费的集中式版本控制系统,直到现在还有不少人在用。由于CVS自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。同样是开源而且免费的SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。
除了免费的外,还有收费的集中式版本控制系统,比如IBM的ClearCase(以前是Rational公司的,被IBM收购了),特点是安装比Windows还大,运行比蜗牛还慢,能用ClearCase的一般是世界500强,他们有个共同的特点是财大气粗,或者人傻钱多。
微软自己也有一个集中式版本控制系统叫VSS,集成在Visual Studio中。由于其反人类的设计,连微软自己都不好意思用了。
分布式版本控制系统除了Git以及促使Git诞生的BitKeeper外,还有类似Git的Mercurial和Bazaar等。这些分布式版本控制系统各有特点,但最快、最简单也最流行的依然是Git!
1问:
"集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。"可是您说的集中式版本控制系统的这个毛病是在提交代码上线的时候, 这个分布式的也会遇到这个问题啊, 比如开发完了, 肯定要推送的啊, 推送的过程遇到网慢, 不也是一样会憋死人啊? 您说的分布式可以不联网开发,那是在本地开发的情况下, 这个SVN也可以做到啊,我开发完了本地测试好了再上传代码, 没有问题啊
答:
-
commit要频繁,不然无法记录你的改动,svn的问题是每次commit都必须联网,如果你一天commit一次,中间的修改你找不回来
就是说,这是针对多次多次commit记录日志这个功能来说的;实现这个功能git不需要联网,而svn需要
2问:
分布式的版本控系统如果要在多个人之间协作不也是需要一个像github一样的的远程版本库吗,这与集中式的有什么区别呢?
答:
-
集中式的服务器挂了所有人都挂了,因为完整仓库只存在服务器上,分布式如果github挂了你可以重新建一个服务器,然后把任何一个人的仓库clone过去,一句话总结:分布式版本控制的每个节点都是完整仓库
追问:
那我能不能理解svn中央服务器挂了,那我一样可以将本地的项目重新搭建一个服务器呢?
答:
不行,你的本地没有历史版本
总结:
Git与SVN的主要差别我觉得这两个工具主要的区别在于历史版本维护的位置
4、Git 与 SVN 区别
GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。
Git 与 SVN 区别点:
1)GIT是分布式的,SVN不是
这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
2)GIT把内容按元数据方式存储,而SVN是按文件
所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
3)GIT分支和SVN的分支不同
分支在SVN中一点不特别,就是版本库中的另外的一个目录。
4)GIT没有一个全局的版本号,而SVN有
目前为止这是跟SVN相比GIT缺少的最大的一个特征。
5)GIT的内容完整性要优于SVN
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
二、Github概述
1、Github是什么
github是一个用git做版本控制的项目托管平台。
GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。
git指定了 remote 链接和用户信息(git 靠用户名+邮箱识别用户)之后,git 可以帮你将提交过的代码 push 到远程的仓库(任意提供了 git 托管服务的服务器上都可以,包括你自己建一个或者 GitHub/BitBucket 等网站提供的服务器)或者将远程仓库的代码 fetch 到本地。
2、Github的优势
只支持Git
Git是最好的版本控制系统就只使用Git,没必要兼容其它的版本控制系统而牺牲Git的某些独特的特性
完整协议支持
在线文件编辑
不熟悉Git的用户可以在浏览器上直接管理
社交网络元素
特色工作模式
私有仓库托管(收费)
Rub yon Rails
3、为什么要学习 Github,或者说学习 Github 对我们有什么好处?
-
理由一:
-
Github 上有很多大牛出没
-
国外的咱先不说,就国内的像百度、腾讯、阿里之类的大公司,里面的很多工程师都在 Github 上安家落户,有空的时候多在 Github 上逛逛,关注一下大牛,没准还能搞个内推什么的。
-
-
理由二:
-
Github 上可以接触到最新的最前沿的 IT 技术。
-
因为,我们知道任何软件或者产品在上线发布之前,都有开发的过程和测试的过程,Github 上你可以接触到这些产品的初始状态、中间状态和发布状态,你可以第一时间了解到产品的动向。而且根据 Github 上每年发布的统计数据,你可以知道哪些技术是最火热的技术,及时跟上这些技术,而不是学一些过时的小众的技术。这个恐怕是每个搞 IT 技术的人,都非常关心的一个问题。
-
-
理由三:
-
Github 是基于 Git 版本控制工具的,任何一个软件从无到有的全部过程,或者说软件从无到有的每个版本,它是怎么发展过来的,全都一览无遗。
-
从这里面我们可以学到开发的技术,包括编程语言、单元测试、设计思想、编码规范、项目的协调组织以及流程,等等。而且因为 Github 是版本控制,可以很好的管理程序代码或者文档的每个历史状态,相当于我们每天刷的微博或者微信朋友圈。这些社交媒体工具可以记录我们的生活点滴,而 Github 可以记录我们的技术发展,如果你是一个刚上大一的新生,如果能把学习的每门课程,从 C 语言、数据结构开始,把每门课程的练习代码放到 Github 上,四年下来也是一个很好的积累。
-
-
理由四:
-
Github 是开源的,开源就意味着所有项目的代码和文档,甚至中间过程对我们都是开放的。 我们从这些项目中可以找一些感兴趣的项目参与其中,可以利用这些项目来提升我们的技术,积累我们的项目经验。很多大学生毕业的时候,因为没有项目经验而被企业拒之门外,试想一下,如果能够在大学期间,从大一就开始接触了了解 Github,在大学毕业的时候在 Github 上已经有一些参与项目的经验,那会对我们的未来有多大的帮助啊。如果你想做程序员,你可以在开源项目中贡献代码,如果你想做测试工程师,你可以在开源项目中提 bug 缺陷。
-
而且,Github 上确实有很多猎头在关注着你,有很多靠谱的工作机会等待着你,前提是你需要在 Github 上安家,然后把你对 IT 技术的学习过程用 Github 管理起来。利用 Github 在个人职业发展上,走向成功的案例举不胜举。
-
-
理由五:
-
Github 不仅托管的项目不仅可以是软件包或者程序代码,也可以是文档教程。
-
所以,我对 Github 的资料,分两个大类,一个程序代码,二是自然语言代码。程序代码很好理解,大家都多少接触过编程,了解一门或多门编程语言。自然语言代码,其实就是自然语言编写的文档资料。即使我们因为程序语言掌握的不好,不太能一上来参与到开源项目中去贡献代码。但是,很多技术大牛在 Github 上做了很多非常棒的入门教程,帮助初学者。像我就用 Github 做课程开发,大家可以在我的 Github courses 仓库中,找到很多课程的资料页面。有的人在 Github 上写书,我这里搜藏了两个大牛写的 python 书,都可以完全免费的在线阅读。还有阮一峰老师写的 JavaScript 书,等等。
-
-
所以 Github 是一个非常丰富的学习资料仓库。大家如果不接触 Github,没有掌握 Github 这个强大的工具,这些优质的学习资料,就跟大家失之交臂了,这是非常可惜的一件事情。
-
最后,用一句话来总结一下这个话题。那就是,一旦你掌握了 Github 这个强大的工具,你的 IT 技术水平或者职业发展就进入了快车道。
4、其它的项目托管平台
sourceforge
SF为大家所熟知,开源项目的大本营,SF托管至少28万个开源项目,一天的下载量超过200万。
google code
Google提供免费的使用Subversion或是Mercurial版本控制系统的开源项目托管服务。 它提供2G的存储空间,整合了代码查看工具、wiki、问题跟踪。Google Code站点也提供了大量的Googe自己的APIs和其他开发工具。
codeplex
由微软托管,Codepex提供微软开发的开源软件和一些社区项目。它提供下载的项目超过2万。
开源中国社区团队基于开源项目 GitLab 开发的在线代码托管平台。Git @ OSC 除了提供最基础的 git 代码托管之外,还提供代码在线查看、历史版本查看、Fork、Pull Reuqest 、打包下载任意版本、Issue、Wiki 等方便管理、开发、协作、共享的功能,具体请查看帮助。
淘宝的 http://code.taobao.org/
TaoCode是为开源爱好者和广大技术人员提供交流、孵化、创新项目的平台,同时平台也遵循开源理念全面开源,欢迎更多朋友来参与平台建设,希望在我们共同的努力下能加速中国开源消费者向开源贡献者的转变。
三、玩转Github
1、了解Github
要求:
阅读百度百科的 Github 词条;
浏览 Github 2016 年度报告;
2、注册Github帐户
要求: # 建议使用真实信息
姓名;
头像;
职业信息;
单位信息;
位置信息;
3、Github社交
要求:
Follow(关注) 某大牛
Star(收藏) 某项目
Watch(关注) 某项目
4、Github挖宝
要求:
搜索活跃的大牛;
查找感兴趣的项目;
5、Github仓库
要求:
浏览 courses 仓库;
创建 Test 仓库;
设置 Github Page;
在 Test 仓库中操作;
删除 Test 仓库;
本文转自xiexiaojun51CTO博客,原文链接: http://blog.51cto.com/xiexiaojun/1919661,如需转载请自行联系原作者