什么是 GitHub
确切的说 GitHub 是一家公司,位于旧金山,由 Chris Wanstrath, PJ Hyett 与 Tom PrestonWerner 三位开发者在2008年4月创办。这是它的 Logo:
2008年4月10日,GitHub正式成立,地址:How people build software · GitHub ,主要提供基于git的版本托管服务。
一经上线,它的发展速度惊为天人,截止目前,GitHub 已经发展成全球最大的开(同)源(性)社区。
GitHub 与 Git 的关系
Git 是一款免费、开源的分布式版本控制系统,他是著名的 Linux 发明者 Linus Torvalds 开发的。说到版本控制系统,估计很多人都用过 SVN ,只不过 Git 是新时代的产物,如果你还在用 SVN 来管理你的代码,那就真的有些落伍了。不管是学习 GitHub ,还是以后想从事编程行业,Git 都可以算是必备技能了,所以从现在开始建议你先去学习熟悉下 Git。
而 GitHub 上面说了,主要提供基于 git 的版本托管服务。也就是说现在 GitHub 上托管的所有项目代码都是基于 Git 来进行版本控制的,所以 Git 只是 GitHub 上用来管理项目的一个工具而已,GitHub 的功能可远不止于此!
GitHub 的影响力
上面我说了 GitHub 现在毫无疑问基本是全球最大的开源社区了,这样说你们可能认为未免有点浮夸,且听我一一举证:
全球顶级科技公司纷纷加入 GitHub ,并贡献他们自己的项目代码
- Google: https://github.com/google
- 苹果: https://github.com/apple
- Facebook: https://github.com/facebook
- Twitter:https://github.com/twitter
- 微软:https://github.com/microsoft
- Square:https://github.com/square
- 阿里:https://github.com/alibaba
- ...
全球顶级开源项目都优先选择在 GitHub 上开源
- Linux:https://github.com/torvalds/linux
- Rails:https://github.com/rails/rails
- Nodejs:https://github.com/nodejs/node
- Swift:https://github.com/apple/swift
- CoffeeScript:https://github.com/jashkenas/coffeescript
- Ruby:https://github.com/ruby/ruby
- ...
全球顶级编程大牛加入GitHub
- Linux 发明者 Linus Torvalds:https://github.com/torvalds
- Rails 创始人 DHH:https://github.com/dhh
- 被称为「Android之神」的 JakeWharton:https://github.com/JakeWharton , 你们用的很多开源库如 ButterKnife、OkHttp、 Retrofit、 Picasso、ViewPagerIndicator 等都是出自他之手!
其他就不一一列举了,GitHub 上活跃的很多是 Google 、Square、阿里等公司的员工,有些甚至还是Google Android Team组的,所以在这里你可以接触到全球顶级编程大牛!
GitHub 有什么用
- 学习优秀的开源项目
开源社区一直有一句流行的话叫「不要重复发明轮子」,某种意义上正是因为开源社区的贡献,我们的软件开发才能变得越来越容易,越来越快速。试想你在做项目时,如果每一模块都要自己去写,如网络库、图片加载库、ORM库等等,自己写的好不好是一回事,时间与资源是很大的成本。对于大公司可能会有人力与资源去发明一套自己的轮子,但是对于大部分互联网创业公司来说时间就是一切。而且你在使用开源项目的过程也可以学习他们优秀的设计思想、实现方式,这是最好的学习资料,也是一份提升自己能力的绝佳方式! - 多人协作
如果你想发起一个项目,比如翻译一份不错的英文文档,觉得一个人的精力不够,所以你需要更多的人参与进来,这时候 GitHub 是你的最佳选择,感兴趣的人可以参与进来,利用业余时间对这个项目做贡献,然后可以互相审核、合并,简直不要太棒! - 搭建博客、个人网站或者公司官网
这个就不用多说了,现在越来越多的博客都是基于 GitHub Pages 来搭建的了,你可以随心所欲的定制自己的样式,可以给你博客买个逼格高的域名,再也不用忍受各大博客网站的约束与各式各样的广告了! - 写作
如果你喜欢写作,而且基于 Markdown, 并准备出版书籍,那么推荐你用 Gitbook ,技术写作人的最爱! - 个人简历
如果你有一个活跃的 GitHub 账号,上面有自己不错的开源项目,还经常给别的开源项目提问题,push 代码,那么你找工作将是一个非常大的优势,现在程序员的招聘很多公司都很看中你 GitHub 账号,某种意义上 GitHub 就可以算是你的简历了。而且不仅国内,很多国外的科技公司都会通过 GitHub 来寻找优秀的人才,比如我甚至通过 GitHub 收到过 Facebook 的邀请邮件!
GitHub 基本概念
上面认识了 GitHub 的基本面貌之后,你需要了解一些 GitHub 的基本概念,这些概念是你经常会接触并遇到的。
- Repository
仓库的意思,即你的项目,你想在 GitHub 上开源一个项目,那就必须要新建一个 Repository,如果你开源的项目多了,你就拥有了多个 Repositories 。 - Issue
问题的意思,举个例子,就是你开源了一个项目,别人发现你的项目中有bug,或者哪些地方做的不够好,他就可以给你提个 Issue ,即问题,提的问题多了,也就是 Issues ,然后你看到了这些问题就可以去逐个修复,修复ok了就可以一个个的 Close 掉。 - Star
这个好理解,就是给项目点赞,但是在 GitHub 上的点赞远比微博、知乎点赞难的多,如果你有一个项目获得100个star都算很不容易了! - Fork
这个不好翻译,如果实在要翻译我把他翻译成分叉,什么意思呢?你开源了一个项目,别人想在你这个项目的基础上做些改进,然后应用到自己的项目中,这个时候他就可以 Fork 你的项目,这个时候他的 GitHub 主页上就多了一个项目,只不过这个项目是基于你的项目基础(本质上是在原有项目的基础上新建了一个分支,分支的概念后面会在讲解Git的时候说到),他就可以随心所欲的去改进,但是丝毫不会影响原有项目的代码与结构。 - Pull Request
发起请求,这个其实是基于 Fork 的,还是上面那个例子,如果别人在你基础上做了改进,后来觉得改进的很不错,应该要把这些改进让更多的人收益,于是就想把自己的改进合并到原有项目里,这个时候他就可以发起一个 Pull Request(简称PR) ,原有项目创建人就可以收到这个请求,这个时候他会仔细review你的代码,并且测试觉得OK了,就会接受你的PR,这个时候你做的改进原有项目就会拥有了。 - Watch
这个也好理解就是观察,如果你 Watch 了某个项目,那么以后只要这个项目有任何更新,你都会第一时间收到关于这个项目的通知提醒。 - Gist
有些时候你没有项目可以开源,只是单纯的想分享一些代码片段,那这个时候 Gist 就派上用场了!
福利大放送
- free-programming-books
这个项目目前 star 数排名 GitHub 第三,总 star 数超过6w,这个项目整理了所有跟编程相关的免费书籍,而且全球多国语言版的都有,中文版的在这里:free-programming-books-zh,有了这个项目,理论上你可以获取任何编程相关的学习资料,强烈推荐给你们! - oh-my-zsh
俗话说,不会用 shell 的程序员不是真正的程序员,所以建议每个程序员都懂点 shell,有用不说,装逼利器啊!而 oh-my-zsh 毫无疑问就是目前最流行,最酷炫的 shell,不多说了,懂得自然懂,不懂的以后你们会懂的! - awesome
发现好用的开源项目GitHub 上有各种 awesome 系列,简单来说就是这个系列搜罗整理了 GitHub 上各领域的资源大汇总,比如有 awesome-android, awesome-ios, awesome-java, awesome-python 等等等,就不截图了,你们自行去感受。 - github-cheat-sheet
GitHub 的使用有各种技巧,只不过基本的就够我们用了,但是如果你对 GitHub 超级感兴趣,想更多的了解 GitHub 的使用技巧,那么这个项目就刚好是你需要的,每个 GitHub 粉都应该知道这个项目。 - android-open-project
这个项目是 Trinea 整理的一个开源项目,基本囊括了所有 GitHub 上的 Android优秀开源项目,但是缺点就是太多了不适合快速搜索定位,但是身为 Android 开发无论如何你们应该知道这个项目。 - awesome-android-ui
这个项目跟上面的区别是,这个项目只整理了所有跟 Android UI 相关的优秀开源项目,基本你在实际开发终于到的各种效果上面都几乎能找到类似的项目,简直是开发必备。 - Android_Data
这个项目几乎包括了国内各种学习 Android 的资料,简直太全了,我为这个项目也稍微做了点力,强烈推荐你们收藏起来。 - AndroidInterview-Q-A
这个就不多说了,之前给大家推荐过的,国内一线互联网公司内部面试题库。 - LearningNotes
这是一份非常详细的面试资料,涉及 Android、Java、设计模式、算法等等等,你能想到的,你不能想到的基本都包含了,可以说是适应于任何准备面试的 Android 开发者,看完这个之后别说你还不知道怎么面试!