Git和Github是什么关系?

GitAndGithub

Git 是一款免费、开源的版本控制管理软件

Github 是用 Git版本控制的代码托管平台

Git

简单来说,Git就是一款能够实现版本控制功能的程序,只不过不像一般的用户应用程序,具有美观的GUI界面,它要通过命令行的形式去使用,如下:git clone http://git.kernel.org/linux/kernel/git/torvalds/linux-2.6.git 将linux系统的仓库下载到自己的电脑上

Git程序界面

每一台电脑上安装好Git之后就可以实现版本控制的功能了,不仅仅可以控制代码的版本历史,其它文件,比如文章,报告,小说都可以使用它进行版本控制,因为它就是一个版本控制工具,仅此而已,由于具有一定的使用门槛,所以大多时使用它的人都是程序猿出身,所以对代码进行版本控制毫无疑问成为它最主要的功能

关于Git的用法和详细介绍,我会再出一篇博文,这里仅仅是介绍它和Github的关系,也可以看现成的博文

Github

Github 就是一个远程仓库,用来存放你代码的地方

关于仓库,就是存放你代码所有版本,所有改动信息的一个库,显示在电脑上其实就是一个文件夹,一般来说一个项目建一个仓库

比如你有一份论文要写,但是要对它进行版本控制,就用git给它建一个文件夹,它所有版本都放在这个文件夹里。你的论文就是你开启的项目,这个文件夹就是这个项目的仓库

Git是一个版本控制程序,Github 是一个网站,每个人都可以在上面注册账号,在网站上新建项目和仓库,进行版本控制管理

不仅如此,Github上你可以把别人的开源项目下载下来,研究学习别人的代码,甚至可以加以改进,然后提交给原作者申请合并(pull request),互相交流学习

关于Git的用法和详细介绍,我会再出一篇博文,这里仅仅是介绍它和Github的关系

版本控制

​ 举个栗子,你最近在写一篇报告,经常需要改动的地方很多,大多时候还要取消改动,为了以防万一,你每次改之前都会复制一份相同的文件,重命名一下加上版本号,比如:

  • xxxx年度总结报告-版本1,改动时间 2月3日,改动内容…

  • xxxx年度总结报告-版本2,改动时间2月5日,改动内容…

  • xxxx年度总结报告-版本3,改动时间2月8日,改动内容…

​ 是不是和你改论文的样子很像,这就是最简单的版本控制,把你每一次改动之前和改动之后的版本都保存下来,记录每次 改动的时间改动的内容改动的版本等等,利用这些信息,你可以很轻易的改回到你之前想要的任何版本

版本控制 (官方)

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统

​ 如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。

本地版本控制系统

​ 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 就像我举的那个栗子一样,这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

​ 为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

本地版本控制系统

​ 其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

集中化的版本控制系统

​ 接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。

集中化的版本控制系统

​ 这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

​ 事分两面,有好有坏。 这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

分布式版本控制系统

​ 于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照(意思就是当前最新的文件版本), 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

​ 更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。