GitHub手册

GitHub发展史

诞生

  1. Linux的作者芬兰软件工程师林纳斯·托瓦兹(Linus Torvalds)开发了git。
  2. git通过引入分叉fork的概念使得在开源项目上的协作基本上不会耗费力气,但git做不到的是:帮助程序员找到那些开源项目,也就是说,一个交流的平台是刚需。
  3. 2008年1月,Chris Wanstrath、PJ Hyett和Tom Preston-Werner用Rails框架写出了他们的产品,并通过电子邮件向他们在海湾地区之外的创业公司的朋友们发送了邀请邮件,尝试的反响很好,一个月之后GitHub就诞生了。

商业模式

  1. 一开始是免费的,但是部分用户主动反馈“想要付钱”以得到更好的服务
  2. 现在公开托管你的代码,就可以一直免费地使用GitHub。如果你想使用私有存储库或专有的代码托管服务,你需要付费。2019更新:被巨硬公司收购后,私人仓库也免费了(不得不说,巨硬公司的新掌舵人对开源的重视和凭之取得的商业成绩真的让人侧目!不过很遗憾,中美交恶,开源无国界,GitHub却有。)
  3. 从免费增值产品到私人付费存储库的过渡是无障碍的。如果程序员在GitHub上托管他们个人的开源项目,并定期使用该产品,那么他们很有可能会在日常工作中推荐使用GitHub。

对程序员而言的行业价值

在GitHub之前,程序员除了在技术访谈中回答白板假设之外,没有什么方法能证明他们的编程能力。现在,程序员可以公开托管他们项目的代码库,实际上向潜在雇主展示他们的代码,并参与更广泛的软件开发社区,所有的这些都在一个地方。GitHub不只是让个别程序员受益。招聘人员可以浏览公共资料库和用户档案,以确定潜在的招聘人员,并查看求职者正在从事的项目类型,从而又使GitHub成为一个有价值的招聘工具。

商业发展

  1. 2012年之前,GitHub不仅在几乎没有广告、促销或进行风险投资的情况下吸引了强大的用户群体,而且还增加了使用GitHub托管私有代码库的公司团队的数量。
  2. 为了通过进一步吸引企业客户来扩大收入。GitHub做到这一点的第一件事是聘请布莱恩·多尔(Brian Doll),他于2012年2月成为GitHub的营销和战略副总裁。第二件事是完成了安德雷森·霍洛维茨领投的1亿美元A轮融资。利用这笔资金雇用更多的工程人才并开发新产品。
  3. “我们仍然认为,过早拿太多钱对一家公司的发展来说是不好的。过多的外部影响可能是危险的。我们现在已经成立四年半了,所以我们有机会真正地定义自己。”
  4. 不只是想让程序员的编码变得更容易——他们想让编码本身变得更容易。
  5. 2013年5月9日,白宫在GitHub 上发布了美国官方的“公开数据政策”(Open Data Policy)草案。与GitHub上百万个存储库中托管的代码项目相比,文件本身的效用有限,但它具有非常重要的象征意义。在私人公司的服务器上对外托管政府政策文件是闻所未闻的。这个事是影响非常非常大的了。可见一旦能搭上政府的关系,就非同一般了。
  6. 2015年3月28日,GitHub经受了自推出以来最大规模的网络攻击。在遭受DDoS攻击四个月后,GitHub完成了由红杉资本领投的2.5亿美元B轮融资。这使得GitHub的估值超过了20亿美元。
  7. GitHub面临来自Bitbucket和GitLab的激烈竞争,用户增长受到影响
  8. 2018年6月4日上午,科技领域对微软以75亿美元收购GitHub的消息震惊了。对微软来说,收购GitHub并不是要把GitHub作为一种产品,而是要收购GitHub带来的开发者生态系统。

GitHub商业成功的秘密

  1. 找一个大问题去解决。让Git更容易使用是GitHub的目标,但它从来不是GitHub的最终目标。GitHub的真正目标是让协作和编写软件变得更容易。
    1. 你的产品是为了解决一小部分人遇到的非常特殊的问题,还是为了解决了很多人遇到的大问题?专业化可以成为一个强大产品区分点,但是解决大的、雄心勃勃的问题会给你的产品带来更大的潜在市场。
    2. 你会在日常工作中使用你自己的产品吗?很多公司说“吃自己的狗粮”是一个很好的规则,但实际上很少有公司能做到这一点。
    3. 如果你不使用自己的产品,为什么不呢?你的产品有问题吗?还是你个人没有受到产品要解决的问题的影响?这两种情况都是非常严重的问题。不使用你自己的产品会引发人们是否真的需要你的产品的问题。如果你没有亲身经历你的产品所解决的问题,是什么让你们公司成为解决这个问题最合适的公司呢?
  2. 不断解决令人痛苦的问题,并提供越来越好的解决方案。GitHub之所以成功,是因为它解决了一个技术问题——需要一个更好、更直观的版本控制系统——这在解决人的问题上也具有巨大潜力,即在软件项目上进行轻松、安全和远程的协作。关注技术问题也使GitHub能够解决人的问题,这是GitHub获得成功的一个非常重要的因素。
    1. 如果你能在你现有的产品中添加一个全新的功能,这个功能会是什么,它会解决什么问题?
    2. 为什么你的产品没有这个功能?是野心太大了?还是太难了?还是太宽泛了?如何克服这些障碍来实现这一功能?
    3. 是什么让你试图解决的问题如此痛苦?是技术的问题还是人的问题?
  3. 尽早培养公司的文化。与传统的观念相反,文化不仅仅是一种偶然的行为副产品——它是深思熟虑、有意行动和有目的决策的结果。对于任何公司来说,文化都是成长的关键因素。
    1. 你公司的文化如何反映组织的价值观?即使在早期,GitHub也非常喜欢调侃传统的企业成功观念,从相对扁平的等级结构到公司模拟会议室的人造木板和白兰地酒瓶。你公司的文化对你有什么价值,有什么品牌属性?
    2. 你的员工在多大程度上塑造了你公司的文化?换句话说,你公司的个性有多少是自上而下决定的,随着时间的推移,你所雇用的员工有多少是符合这个个性的?
    3. 你认为你的竞争对手会如何看待你的公司和产品?这种看法在多大程度上是基于组织的文化?

GitHub日常使用

对他人的项目进行fork

  1. 别人的项目,非成员的你一般没有write权限,如果在使用中要提交修改,或者进一步的想要贡献,那么fork工作流就是必须的。
  2. 一般来说fork的目的有2个:
    • 对该项目提出改动意见
    • 利用其他人的项目作为自己项目的起点,并且需要做一些自定义的修改,甚至可能还需要保持团队协作

GitHub上的trending

  1. GitHub提供了一个页面GitHub trending来显示最热门的项目,当然你可以选择当天、当周或者当月的时间范围,并且可以根据语言类型过滤。这应该是一个程序员应该保持关注的页面。
  2. 从GitHub的首页上,export(发现)标签,点进去就可以看到(当然,除了trending还有别的内容,GitHub提供了类似微博社交推荐那样的,根据你的star和follow推荐了一些信息)

GitHub的推送

  1. GitHub会根据你的star和follow给你推荐一些信息
  2. 和其他商业化的平台有所区别的是,这里不会给你推一些垃圾广告
  3. 不知道业界流行?看看你follow的人都关注了什么,star了什么,事半功倍。

查看项目的某次提交的内容

  1. 直接点code里的commit标签,只能通过newerolder这两个按钮去翻页commit,这显然是不对的
  2. GitHub其实提供了很棒的UI界面——insights,(至少2018年10月份还是这个标签),通过可视化的图标形式向用户展示项目的有关统计数据
  3. 其中可以选择network标签,直接通过shift + left组合按键,跳转到提交历史树形图的最左侧(最开始),然后点击对应的commit,就能打开那一次的提交记录了,异常方便。
  4. 但是有时候,这里有一些选项是展示不出来的,可以尝试通过和network平级的其他标签来查看。
  5. 还有一个很土气的办法,复制commit的全部hash,然后在code的地址url后加上search参数:after=hashcode+num其中hashcode是commit的hash,num是从这个commit往前的commit。(有时这不好使)
  6. 另外一个修改url的方法:将任何文件的 URL 中的github.com替换成github.githistory.xyz即可查看文件修改历史

GitHub Pages

  1. 所谓GitHub Pages,其实就是一种静态站点的托管服务(仅仅只是前端服务),当然,是为和GitHub上的仓库关联的站点提供的服务。至于静态页面的架构,官方推荐了Jekyll,可以很简单的使用Jekyll Theme Chooser来修改自己网站的主题。
  2. GitHub的账户分个人账户和组织账户
    1. GitHub有两种基本类型的网页站点:Project Pages sitesUser and Organization Page sites
    2. Project Pages sites和具体的项目关联,网站页面的文件对应于项目仓库的某个分支上的文件。——大白话就是有个url,打开它能看到你的某个仓库
    3. User and Organization Pages sites和具体的项目无关,网站页面的文件属于一个专用的仓库——大白话就是你可以指定一个专用的仓库来对应。注意,此时只能选择master分支。参考规则

Project Pages sites

  1. 指向同名仓库
  2. 分支master或者gh-pages。如果master上有文件夹命名为docs,也会被关联
  3. url是:http(s)://<username>.github.io/<projectname>或者http(s)://<orgname>.github.io/<projectname>
  4. 当然,也可以使用一个自定义的域名来替代<name>.github.io,使用自定义域名后还可以准备自定义的404 error页

User and Organization Pages sites

  1. 指向一个专用仓库的master分支,这个仓库必须以特定的名字命名:<username>.github.io<orgname>.github.io
  2. 其对应的域名就是:http(s)://<username>.github.iohttp(s)://<orgname>.github.io
  3. 可以使用一个自定义的域名来替代。
  4. User Pages sites,可以被任何一个用E-Mail地址注册的GitHub的账号生成。
  5. Organization Pages sites,可以由具有对仓库的push权限的任何一个有可用的E-Mail地址的组织成员建立。
  6. 比如,我们可以GitHub提供的这种前端服务建立一个Blog站点,代码直接就托管在GitHub上。

一些注意点

  1. GitHub上,点击仓库总是会展示同一个默认分支,这个默认分支就是仓库建立之后第一次被推送过去的分支。master也只不过是Git默认的一个名字罢了,所以如果看到某个GitHub的仓库的默认分支不是master,也不要惊讶。
  2. GitHub Pages会默认忽略以下划线_开头的文件和文件夹。为了避免这一点,可以在根目录下增加一个空文件比如.gitkeep(嘿,老伙计)。