[码农必知]GitHub

[% callout %]

程序猿幽默

本文就是在恶搞[程序猿#程序员]。为了照顾不懂幽默的读者和[维基人#一本正经的人],请把鼠标放到[蓝色文字#蓝色文字]上面,或者

维基百科上面有一个恶搞 GitHub 的用户页,详见这里

[% endcallout %]

GitHub 是全球最大的[同性交友#社交编程]网站,也是最活跃的[搞基场所#基于 Git 版本控制软件的空间]。

价格

注册账户不收费,[搞基#编程]也不收费,但[整个搞基过程都是公开的#默认代码仓库都是公开仓库,任何人都可以浏览代码]。如果想[开私密房间#建立私有代码仓库],你就只能掏钱了。

如果你是个老总,GitHub 提供了私人定制服务,这样就可以[足不出户在自己公司和自己公司的员工搞比利了#在自己的服务器上进行版本控制工作]。

功能

知乎上面有人总结了 GitHub 的基本功能:

  • [同性交友#GitHub 是社交网站,具有和社交网站相同的好友、评论、赞、讨论等功能。]
  • [真人约会#任何人均可参与其他人的代码仓库的开发。(当然不能直接改人家的代码。)]
  • [排解寂寞#协同开发与编程,而且支持互相评论。]
  • [释放压力#通过 Git 版本控制系统来提高生产力。]

github

这是知乎里面的一张图(其实知乎还是比较严肃的,这张图是个例外),内容是一个用户页。每个用户都可以[约#Follow]其他人,其他人也可以[约#Follow]用户。[约#Follow]了别人之后,你就可以从首页上看到他的[约会动态#开发动态]。

为了[搞基#开发程序],你需要[开个房间#建立代码仓库 (Repository)]。点击“New Repository” ([开房#建立代码仓库]) 建立[房间#代码仓库]。

下面将详细介绍如何在自己或别人[房间#代码仓库]里[搞基#编程]。

在自己[房间#代码仓库]

毕竟不是旅馆,所以总得知道怎样在[房间#代码仓库]里[玩耍#操作],然后才能[玩得开心#顺利开发]吧?

[% callout %]

提醒

你可以随便在自己的空间内做实验。反正不要钱,而且玩够了可以直接到代码仓库的“Settings”里面删除。

[% endcallout %]

大部分[搞基准备工作#开发工作]都是在本地完成的。在[搞#开发]到一定程度的时候应该记录 (Commit) 一下,这样,在遇到问题的时候就可以有效地追踪[变化#改动],方便[吃后悔药#回退 (Revert) 错误更改]。

客户端

为了[方便偷懒#少敲一堆命令],GitHub 开发了 Windows 和 Mac 客户端。虽然界面也是英语的,但是一看英语就头疼的人应该不会去编程,所以基本上不耽误事儿。

[% callout %]

邮箱

Git 有个关于邮箱的配置。一定要写上自己在 GitHub 上注册时的邮箱,否则提交之后动态也不算你的。

[% endcallout %]

[% callout style=warning %]

关于 Linux 用户

因为用 Linux 的是[高手和宅男#少数人],因此 GitHub 没有 Linux 客户端。既然是高手,那么在 Linux 中[当然#只能]用 git 命令。这里有个又简单又醒目的入门教程。

在用户认证方面,建议使用 SSH key,这样可以少敲 N 次密码。需要进入 GitHub 网站的用户设置,找到 SSH Key 并且把生成的 key 复制到里面。

[% endcallout %]

[开房#建立代码仓库]

“[房间#仓库] (Repository,简称 Repo)”是[搞基#存放源代码]的地方。[进出#存取、修改]、[闲谈#评论](Issues)都是在这里完成的。

所以,想[开房#建立代码仓库]的时候,就应该点击“New repository”按钮,然后起一个名字。名字只支持英文字母数字和符号。

默认情况下,建立的[房间#仓库]都是公开的,反正不要钱。只有付费用户才能[享受 VIP 高档私人房间#建立私有仓库],价格 $7/月。

[玩耍#编辑]

在继续之前,先对仓库所处位置进行一个区分:一个是在 GitHub 网站上面的,一个是在自己电脑上面的。当然,只有把改动上传到网站上面才算数(备注:其实只要 Commit 就算数)。

你不能直接(不能直接当然就是间接)把你搞的东西提交上去,因为[你不能证明那是从 GitHub 搞过来的#本地代码缺少 Git 信息]。你需要让本地仓库里面存在有关 GitHub 的信息(Git 信息)。

一个简单省事儿的办法是:

  1. 先到网站上面,进入到[房间#仓库],然后点击页面右下角的“Clone in Desktop”。不用理会上面的 “clone URL”,反正那是给[宅男#敲命令的人]用的。接下来,GitHub 客户端会自动启动,并询问你将代码保存到什么位置。如果没启动,那你应该先把客户端装好。
  2. 把你弄好的乱七八糟的东西都拽到刚保存的文件夹中。

需要注意的是,页面上有个“Download ZIP”按钮,那个不是给开发者用的,而是给那些希望[抄袭代码然后拿大奖#直接下载]的人用的(后面会详细介绍)。因为下载完的压缩包里也没有 GitHub 信息。

提交和同步改动

Git(不是 GitHub)记录的是改动,因此 Git 更适合纯文本文件。如果主要工作在 Word、Excel、PowerPoint 上面,那么就不应该用 GitHub,而是应该用软件自带的“协作”功能,顺便还能聊天

[搞#编辑]到一定程度,例如完成了一个功能,应该确认 (Commit) 一下改动,以方便追踪。[没有人想和一个一问三不知的人搞基#没有人愿意和不做任何记录和版本控制的码农合作]。

打开 GitHub 客户端(不是网站,因为改动还在本地),找到自己的仓库,客户端会列出你所进行的改动。你需要决定标记哪些文件,然后填写说明,并确认 (Commit) 改动。

注意,Commit 之后改动仍然在本地,而网站上面并不能看到这些改动。点击“Sync”按钮之后才能在网站上面看到最新动态。

还要注意,你不能直接[闯进别人的房间里#提交对别人的软件仓库的编辑],除非别人[是你基友,允许你这样做#在仓库设置中把你设置为“合作者 (Collaborators)”]。

分支 (Branch)

一个软件有很多功能。如果你[玩得够大#程序功能很多],可以通过分支 (Branch) 来分割项目,从而做到各司其职。

发布 (Release)

当你的[糟糕物成熟#程序稳定]之后,你可以决定将其发布 (Release),这样别人就可以直接下载体验现成的二进制文件了。发布之后还有一个好处——很容易找“1.0”、“1.1”、“2.0”版本,免得乱套。

README.md

README.md 是个纯文本文件,用 Markdown 语言书写——不要以为所有的编程语言都像 C 语言那样难学,Markdown 就很好学,几分钟就能学会,而且就算你[笨到根本学不会#有极其严重的代码恐惧症(那还来 GitHub 做甚)],当作纯文本也能用。

如果你在[房间#代码仓库]根目录下放了一个 README.md 文件,写了[“欢迎来搞基,这个房间是用来……的”文字#程序简要说明],那么别人路过你的[房间#代码仓库]的时候就不会一头雾水了。

Wiki

不要一看到 Wiki 就想到维基百科 (Wikipedia) 或者伪基百科。Wiki 是一种文档系统,用在[房间#代码仓库]上面,当然就是用来写有关[搞基#程序]手册的了!

在 GitHub 网站,进入[房间#代码仓库],看右面,然后你就能发现“Wiki”了。

去别人[房间#代码仓库]

当你有了知识水平和一点人生的经验之后,你就可以到别人那里[寻欢作乐#参与开发]了!

[聊天灌水#评论] (Issue)

打开 GitHub 网站,进入一个[房间#代码仓库],你会看到右面有个“Issues”。这就是让你[灌水#评论]的地方。

你可以选择发起一个新对话,也可以跟楼排队形。可以随便[发发牢骚#报告 bug],[表达不满#提出建议意见]。

[% callout style=danger %]

严正声明

尽管本文的恶搞版本将“Issue”称作“聊天”、“灌水”,但是你不应该在 GitHub 的评论中写与程序无关的东西,不要发不合适的内容,更不要连着发帖。因为你每灌一次水,程序作者和关注 (Watch) 这个程序的人就会收到一封垃圾邮件。

你应该只发与程序有关的、有建设性的、语言表达客气得体的文字,共同维护良好的气氛。

[% endcallout %]

Issue 支持 Markdown 语法,也支持发图片。如果你对 Markdown 不熟,Issue 支持在线预览。

分支 (Fork) 、提交 (Pull)、合并 (Merge)

[直接闯入别人房间是不对的#你不能直接修改别人的代码],但这不代表你不能[闯#修改],只不过你需要间接地来。

为了[大大方方的从正门去别人家搞基#将你的改动反映到对方代码仓库中],你需要先迂回一下,在对方[房间#代码仓库页面]右上角点击“Fork”,将其分支出来。这时候你就[把人家房间复制成自己的了#有了一个副本],这个副本是可以按照自己意愿随便改动的。

当你感觉自己[恶搞#修改]得很漂亮的时候,你就可以去对方[房间门口敲门#申请合并]了。这时你需要点击页面右面的“Pull requests” ([合作#合并]请求),然后点击“New pull request”([合作#合并]!)按钮。

此时 GitHub 会帮你分析你都做了哪些[恶搞#修改],你也可以顺便看一下自己的东西好不好看。感觉 OK 之后,到页面下方写点评论(你都做了哪些[坏事儿#贡献]),然后点击“Comment”(评论)。接下来就可以等对方同意了。

在你评论之后,对方会收到一封邮件,[搞基过度有害健康#因为对方不可能一直在线去看 GitHub]。对方点击相同的“Pull requests”时会看到你发的帖子,然后可自行决定是否[合作#合并] (Merge)。如果对方决定 Merge,那么你就成功地[和对方搞基#为对方代码做出贡献]了。不管对方同意还是拒绝还是不做回应,对方都可以进行评论,这样双方就[可以先增进感情#互相就程序问题进行讨论]。

在正式[合作#合并]之前,你的[恶搞#改动],不管是发起申请之前的,还是申请之后的,都会算到 Pull request 之中。这也是[增进感情#进行互动]的需求。

有时候大家[搞得很融洽#代码没有冲突],[合作#合并]过程就很顺利。但是有时候[手乱伸就容易冲突#改动会发生冲突],这时就需要[对方#程序作者]决策,手工解决冲突,然后再[合作#合并]。

[% callout %]

合作者 (Collaborators)

如果你和[基友#合作者]一块[搞基#开发],那么你可以考虑将[基友#合作者]设置为“合作者” (Collaborators),这样他就不用麻烦地 Fork 和 Pull 了。

合作者设置在[房间#代码仓库]设置里。在页面右面的“Settings”中。

如果合作者太多,可以考虑成立一个组织 (Organization)。

[% endcallout %]

组织 (Organization)

GitHub 里建立组织是合法的,想建立多少就可以建立多少,而且不用备案登记。

既然是一个组织,那么就可以设置管理员,并且各路[基友#开发者]就可以一起[玩 >3 Players 的游戏#协同开发]。

组织的地位和用户是平等的,除了你不能[约#Follow]一个组织,组织也不能[约#Follow]你。

[% callout style=danger %]

不要反党!

GitHub 是用于软件开发的网站,也是中国很多软件公司保持运转的重要工具。没有人希望 GitHub 只是因为里面有一点不恰当的政治内容就被墙了。同样,没有人喜欢被有关部门请去喝茶。

[% endcallout %]

虽然 GitHub 不用备案登记,不过,如果你做了反动的事儿,[水表和快递#警察叔叔]还是要来的。

其他

既然全世界的码农都到这个网站[搞基#编程],那么,

在你准备开发一个应用的时候,为什么不先搜索一下,找一个类似的项目借鉴借鉴呢?

这里有一个 Search 的经典案例:有人到 GitHub 里抄袭代码,然后就获奖了,而且是最高奖!所以,你为什么还不趁着 GitHub 没被墙的时候抄一个大奖回来?

因为想拿奖的人太多了,所以 GitHub 页面顶端就有一个搜索栏。搜索之后还可以根据语言来筛选。

Octocat

注意!喵星人来袭,点这里抵御攻击!

[% callout style=warning %]

关于抄袭

在天朝,抄袭一点创意,copy 一点素材都是无所谓的。不过,得等到 GitHub 彻底被墙之后再说。因为,复旦在 2015 年制作宣传片时抄袭了一些没有被墙的东西,结果连续两次引发了群众的强烈不满……(相关新闻:复旦第一次抄袭第二次抄袭

[% endcallout %]

Gist

有时候,因为[没什么基情#只有一些代码片段],不值得[开房搞基#建立代码仓库],所以 GitHub 提供了另一个服务——GitHub Gist。

Gist 的功能和 GitHub 类似,不过里面都是[段子#代码片段],规模比较小,小到在线就可以编辑。当然仍然可以用 Git 来进行版本控制,只要你不嫌麻烦。

在中国,虽然墙娘不敢再随便欺负[小猫#GitHub],但是 GitHub Gist 仍然被墙,所以:

192.30.252.142 gist.github.com
199.27.74.133 gist-assets.github.com

Pages

GitHub Pages 是免费的静态空间服务,可以架设静态网站,包括静态博客。

常用的静态博客系统有 Jekyll、Hexo 等。其中 Jekyll 是受 Pages 官方支持的。常用的评论系统有 Disqus 和多说。

因为静态空间实现不了多大功能,而且静态博客系统不支持 Windows,因此乡民们更愿意在 GitHub 搞基,而不是喝茶写博客。

GayHub

2015 年 6 月 26 日,美国最高法宣布同性婚姻合乎宪法。为表示庆祝,GitHub 将网站 logo 换成了彩虹背景。不过毕竟不能排斥异性恋,所以后来又把 logo 换回来了。