Git与Github(1 git与github简介)

什么是Git,什么又是Github?

先说Git

与众人所熟知的github不一样,git是一个软件,就如同你装在计算机里运行的所有其他软件一样,这是一个伟大的发明创造。

起源、定义

git的创造者是Linus Benedict Torvalds, 林纳斯先生的另一伟大创造就是Linux系统,而我们的主角Git也与Linux有着很深的联系,Git是为Linux专门打造的版本控制器。
综上我们现在有两个问题,什么是版本控制器?为什么Linux需要这个玩意?

先来解决第一个文题:什么是版本控制器?

版本控制器统称VCS(version control system)顾名思义,它就是用来控制版本的。如果你有玩过单机版RPG游戏,那么你一定会懂,在每次面对强大的boss时,你首先需要做的就是存档,当boss战对自己不利,或是消耗太多时,为了避免死亡,你可以选择读档,从之前你的存档处开始,既避免了死亡的惩罚,又不用像之前一样解决小怪。
版本控制器就是文件版的存档,当你在自己的计算机上完成某一个项目时,你可以借助VCS来实现版本的储存迭代,它会记录下每一次的版本内容,提交时间,你可以选择从现在跳回(Git中称为回滚)之前你储存的任何一个版本。
要做到以上,通常我们会这么做
这样会导致文件乱七八糟,如果起名不规则,还会导致文件错乱。但如果运用Git,文件夹中只会有一个文件,但却保存所有的文件版本。以上过程都在你自己的本地计算机中进行,叫做local VCS,Git当然能做到,但它做到的不仅于此。

我们先解决第二个问题:为什么Linux需要Git?

我在此对Linux不多作介绍,读者若对此没有概念,那请 一定 学习有关于它的相关资料,Linux是开源的操作系统,既然是开源的就会有杰出的程序员、黑客为它做出贡献,但是这就涉及到一个问题,我们该如何将这些代码片段合成来实现Linux的更新呢?原来的方法,是由林纳斯手动填补,但这样效率低下,重复劳动大,自2002年起,Linux开始使用Bitkeeper(一个商用软件)作为版本控制器,来实现版本更新,这是怎么实现的?我们借此机会介绍版本控制器的另外两种模式:Centralized VCS 和 Distributed VCS。
Centralize VCS由一个数据中心和多个开发者构成,所有的数据、文件等都存储且仅存储在数据中心中,开发者负责对数据中心中的文件进行创建debug等。这样的好处是管理数据中心者具有绝对的权限,他可以指定每一个开发者的权限,设定他能看到多少内容。但这样做却冒着巨大的风险,一旦数据中心遭到攻击或是出现系统故障,所有人的工作都有在一瞬间化泡影的风险。Distributed VCS填补了这样的问题。
它将原本的Local VCS与Centralized VCS相结合,它在每个人的计算机包括中心数据库上都建立了数据库,存放了自初始到最终版本中每一个文件版本,每个人都可以将自己的工作发布上传到中心数据库,看到文件更新的人都可以从数据中心下载保存在自己的计算机之中,在此基础上再做贡献。
Git就是帮助我们实现这一切的软件,而我们使用Git上传到的数据中心,就是大名鼎鼎的Github。
回到那段历史,Bitkeeper一直为Linux提供服务,直到2005年,该公司与Linux社区一众黑客决裂,相传原因是有人尝试对Bitkeeper进行破解(就是把人家的正版软件盗版化。顺带一提,Bitkeeper一直无偿为Linux社区提供服务。)没办法,社区们的诸位以林纳斯先生为首,于2005年推出了Git,来帮助Linux进行版本更新,代码补充。今天,Git不再单单是Linux的专属软件,它为windows、Linux、Mac等系统提供 无偿的、开源的服务,Git一经推出迅速占领了VCS的市场,随着Github的面世,Git的用户数量再次获得了爆炸性的增长。2016年,原本作为商业软件的Bitkeeper,宣布对外开源。

再来看看Github

就像我们之前提到过的,GitHub相对于Git而言是其数据中心,当然,基于git而开发的数据中心不止GitHub一个,比较知名的还有gitlab等。但是在所有为git提供服务的数据中心之中,github无疑是最大最成功的一个。截至2020年一月,GitHub已经拥有超过四千万的用户以及超过一亿九千万个代码仓库[4],这个数字还在不断的累加增长,GitHub毫无疑问是世界上最大的代码社区。继承了开源运动的优秀思想,GitHub的大多数服务都是免费的,读者现在看到的这个网站也是基于GitHub的服务器搭建起来的。笔者在此解决一些有关于GitHub最经常被问到的问题。

我们能用GitHub做什么?

尽管已经讲了那么多,作为一个开发者/学生/教师/科研人员,我们到底能用它做些什么?
就像我们刚才讲的一样,GitHub最原始的目的就是作为git的网络仓库,储存、分发下载、上传的基地,我们可以将原本存储在自己电脑上的版本信息上传至GitHub防止丢失,同时也可以供全世界的人一同下载一起开发。基于此,笔者再此给出GitHub一些常用用法。

持续性的在不同的电脑终端上进行自己的工作

假设我们在写一个项目,项目并未完成,因为外界原因我们需要转移阵地,为了能在其他地方继续我们的工作,我们应该怎么做?通常做法是使用U盘将自己需要继续的工作拷贝下来,换台电脑继续。GitHub则提供了另一种方案,我们可以将半完成品上传到GitHub中,到了另一个地方,打开终端从GitHub中将自己的工作下载然后继续coding。

创建小组工作

在开始这一段之前我们必须弄明白GitHub中的角色分配问题,GitHub中有organization(组织)、team(团队)以及个体三种单位,要想团队协作开发一个项目,我们首先需要创建一个组织,一个组织之中可以有多个项目,多个团队,而具体到一个团队之中就会有不同的分工存在。
一个团队之中有三类成员:admin(管理员)、write(编写者)、read(游客)
这三者各自所拥有的权限不一样,其中admin(管理员)拥有最多的权限包括:给项目添加成员、从代码仓库中复制代码到本地、将本地代码上传到仓库、在线阅读代码,而编写者只拥有后三项,其不能给项目添加成员,游客只能阅读和下载,而不能进行提交合并代码。
读到这里你可能已经发现了,好像不论是谁都可以下载阅读你写的代码,而你也可以阅读下载别人的代码。是的,GitHub提供免费服务的前提条件之一就是你所做的项目,你所写的代码要符合开源协定,就是你的代码可以被任意阅读下载,而如果你需要一个私密项目,抱歉,GitHub是要收费的。同时GitHub在组织某些方面的服务(例如大规模的组织云存储空间)也是有付费要求的,详情如下

为开源事业添砖加瓦

在GitHub上有众多全球范围内的开源合作项目,你可以选择加入,为其添砖加瓦,你所需要做的如下:

观察到每个开源项目的右上角都会有一个fork选项,选中后该仓库中的所有代码会自动移存到你的仓库中,你可以通过对你自己仓库中的版本进行修改添加(注意是对你自己的库中的版本,你是没有权限直接修改人家的东西的)修改完毕后,你可以选择向项目的原作者申请代码合并(pull request)简称PR,原作可以通过自己的github账号审阅你的代码,考虑是否将你的贡献添加入原来的代码中,一旦通过,你就是该项目的贡献者了。

参考资料:

[1]bitkeeper官网: https://www.bitkeeper.org/
[2]Git官网:https://git-scm.com/
[3]Progit written by Scott Chacon and Ben Straub(该书可以免费在Git官网上下载,文中思维导图均引自此书)
[4]https://en.wikipedia.org/wiki/GitHub