GitHub是一个非常强大的SCM(source code management)工具,相信程序猿朋友们应该都了解GitHub,至少或多或少听过或者接触过GItHub。它主要用途是代码的版本管理。当然也有很多人用作文件的管理,例如Office 文档等,因为代码本身也是以文件的形式保存的,所以理论上任何形式的文件应该都可以用GItHub来管理。可以把GitHub理解为一个具有强大版本管理功能的云存储系统,就像AWS 的 S3,或者是GCP(google cloud platform)的Storage。
我们平时自己写一些程序或者编写一些文件,一般会直接保存在本地,但是保存本地有一个问题,那就是如果因为操作失误,将文件误删,导致源文件无法恢复,可能会造成一定的损失;又或者我们想继续上一次编辑的代码或文档继续编写,可是当下电脑却不在身边,那么也将无法满足随时继续编写的需求。
GItHub正式基于以上的使用场景,提供了非常强大且便利的工具。下面来介绍一下GitHub的使用特点:
- GitHub提供远程存储功能,可以将本地文件同步到GitHub上,并且随时随地可以将保存在远程GitHub Repo(代码库)内的文件下载到本地,进行连续的文件或代码编辑。
- GitHub提供了强大的版本管理功能,可以记录所有commit(将本地文件提交到远程代码库,即Repository)的历史记录,提交者可以在Web界面查看所有的提交历史,并可以查看每次提交记录对应的具体修改内容。
- 编辑者将远程代码clone到本地后,可以强制回退(roll back)到任一历史的commit 节点。
- GitHub提供了分支(branch)管理功能,可以实现多人协同开发同一份代码。例如每个人可以根据自己负责的内容从同一主分支生成不同的功能分支,当一个人完成功能代码后,可以向主分支发出Pull Request,也就是请求将自己功能分支的修改合并到主分支上,依次类推,其他人也可以在完成自己的功能代码后,也向主分支发起Pull Request, 这样大家彼此互不依赖,也互不干扰,实现并行开发。当然多人并行开发提交Pull Request时,如果不同的人对同一个文件进行了修改,可能会涉及文件Conflict(冲突)的问题,GitHub也有专门的工具来协助解决文件冲突,例如diff,此文不做详细解释,后面会单独写一篇如何使用GitHub的详细教程,里面会涉及相关内容。
- GitHub还提供了代码审查(review)功能,可以保证文件或代码修改的正确性和高质量。例如开发者A修改了代码后,发起Pull Request,在合并到主分支之前,需要指定一个人作为审查者(reviewer)对该部分的修改做人工的审阅,一般会选择一个经验相对丰富,或者对已有代码逻辑较为清楚的人作为reviewer,从而以保证修改内容的正确性。
- GItHub 也提供了丰富的工具,包括对非开发人员相对友好的UI交互工具,方便非开发人员快速简洁的操作GitHub,同时也提供了更Geek的纯命令行工具,让开发人员可以通过强大的命令行来访问GitHub的功能。这些工具目前在主流的操作系统上都有对应的版本,例如在Windows,Linux, Mac OS下,都有相应的Git工具。
- 一个账号走遍天下。只要一个账号,只要在能上网的地方,就可以随时登陆自己的GItHub,随时随地,在任何设备上同步自己的代码,目前还有手机移动端的GitHub app, 可以在手机上review代码。
- 可以创建私有代码库(private repository),GitHub被微软收购前,private repo是要单独收费的,不过被微软收购后,财大气粗的微软向独立开发者抛出了友好的橄榄枝,允许独立开发者获取免费创建private repo的权限,不过一个账号好像只能创建有限数量的免费的private repo,当然这已经是非常大手笔了。对于private repo, 代码是非公开的,其他人是看不到也搜不到你的private repo内的资料,从而保证了代码或者文件的隐私性。当然我们可以通过添加合作者(collaborator)的方式,来指定某些人可以访问或者共同编辑自己的private repo.
综上所述,可以看出,GitHub在代码管理上有着非常强大的功能,所以它在程序员的世界中是非常受欢迎,也是应用最为广泛的SCM工具。其实GitHub还有很多其他强大的功能,不过作为程序员,以上场景是日常开发中接触比较频繁,也是使用最为广泛的功能。下一篇我将会详解讲解一下,作为零基础或者初次接触GItHub的人,如何正确快速的创建自己的Git Repo,并部署自己的代码到远程Reop中。希望能帮助到需要的小伙伴。