所有人都应该学会使用 GitHub

我是在上周因为所谓的“二二七事件”第一次听说 AO3 (Archive of Our Own) 这个网站的。因为同样的原因,这一网站在一些地区已经无法访问。

这引发了我的思考:在现在这个世界,作为一个普通人,如何能让此类事件对自己的影响降到最低?我想起了 GitHub.

GitHub 最原先仅仅是一个代码托管网站,也仅仅在 IT 从业人员内部流行。近些年来,除了软件的源代码,还有不少其他的内容也被发布到了 GitHub 上,比如 2019 年引发热烈讨论的 996.ICU 就是一个托管在 GitHub 上的项目。这让我觉得,GitHub 不应该只是相关从业人员独享的一个产品,所有人都应该学会如何利用 GitHub.

2018 年, GitHub 被微软收购。当时我听到一些网络社群一片哀嚎,声称将会从 GitHub 搬家。没过多久,GitHub 宣布免费账户的私有仓库数量将不受限制,唯一条件是私有仓库的合作者将会有三个的上限。

这对普罗大众更是一个好消息!只要你学会如何使用 GitHub,你可以把自己创作的内容放在 GitHub 上托管——不论你想让它公开还是保留给自己。唯一算得上缺点的可能是每一个软件仓库的大小限制:1 GB,这对于以文字为主的创作来说应该是足够了。这一限制对于软件仓库来说是合理的,毕竟软件是由一行行代码写成,对二进制文件版本控制的优化并不在需求范围之内。

我刚刚提到了“版本控制”这四个字,要了解这是什么,我们首先得知道什么是 Git。

GitHub 仅仅是利用 Git 进行版本控制的软件仓库之一。类似的产品还有 GitLab 和 Bitbucket 等。GitHub 仅仅是许多软件仓库中用户最多也最易用的一个而已。

Git 是一个分布式版本控制软件。要理解这是什么意思,先来看看它的几个核心概念:

  • 创作者创建一个新的软件仓库后,还会得到这个仓库的 URL. 所有有权限访问这个 URL 的人都可以在他们自己的电脑里克隆 (clone) 这个软件仓库。
  • 创建者在这个软件仓库中新建了一个文本文件,为了让这个文件接受 Git 的版本控制,创建者需要将这个文件加入 (add) 版本控制。
  • 创作者在创作的某一阶段完成之后,将自己对文件的改动登记 (commit),这是一个“快照”。如果对这一改动不满意,还可以通过更复杂的操作返回到改动之前的状态。在进行登记的同时,还需要写下关于这一改动的简短描述。例如将什么内容做出了改动,改动的原因等。
  • 创作者在对创作满意后,将自己所有的改动都推送 (push) 到服务器上。这时,其他有访问权限的人才会看到更新和创作者创作的每一个快照。
  • 如果创作者希望在主分支 (master branch) 的基础上做出一些“实验性”的改动,同时不希望影响主分支,可以创建其他分支 (branch) 并做出独立的改动。
  • 所有拥有仓库本地拷贝的人都可以在创建者推送更新之后拉取 (pull) 所有新的改动,保证本地版本与服务器上的版本的一致。

“分布式”在这里的意思是 Git 服务的提供者只是扮演了一个托管者的角色,所有拥有权限的人都可以通过仓库的 URL 获得关于这个仓库所有被登记 (commit) 的改动的历史快照。如果仓库一旦被服务提供商删除,所有拥有本地备份的人都可以选择更改服务器的地址,然后将这一仓库上传。同时,服务提供商的中立性也会被用户质疑。

GitHub 在 Git 提供的功能之外,还有一些独立于 Git 之外的功能。我在这里只会提到两个我认为最有用的:Fork 和 GitHub Pages.

假如你在 GitHub 上发现了一个很有趣的仓库,自己也想基于这个仓库做一些有趣的东西然后发布出来,应该怎么办?仓库不是自己的,自己是没有权限直接将自己的改动发布到原始的仓库里的。这里就需要用到 “fork” 这个功能。将一个仓库 fork 之后,GitHub 就会在你自己的帐号里创建一个基于原仓库的镜像,因为是你自己的仓库,所以你可以随意改动。如果你希望自己的改动被原作者整合 (merge) 到原仓库,你还可以向原作者发出请求 (pull request)。Fork 的概念类似我之前提到的分支。区别在于存在于 Git 里的分支是同一仓库里的分支,而 fork 创建的是一个新的仓库。

那 GitHub Pages 是什么呢?如果你的仓库里存在一个叫做 gh-pages 的分支,GitHub 会认为这一分支内包含的是关于这一仓库的网页源代码,会将其中的内容渲染成网页显示出来。因为这一个功能的存在,你可以利用 GitHub 制作自己的网站,而不用花费一分钱。当然,这网站的内容是静态的,如果需要相对复杂的网页功能,比如评论、管理员后台,则可以将 GitHub Pages 搭配无服务器计算产品使用。

基于同样的原因,现今也有一些自由软件可以生成静态 HTML 页面发布到 GitHub Pages, 这是一个简单、经济、高效的网站创建方法。事实上,我的网站 xiaozhenba.ng 就是利用这样的方法创建的,至今仍然托管在 GitHub 上。

先前提到过,Git 对于二进制文件的版本控制并不是很好。针对文本文件,Git 的版本控制精确到行。使用者可以比对两次改动之间,有哪一些行的文字发生了改变。而二进制文件是人类无法读取的,同时一个二进制文件发生改变之后,往往是整个文件的大变动。所以,针对二进制文件,Git 在每一次改动之后都会保存整个文件的快照,而不是像文本文件一样只登记发生改动的部分。这就导致了如果一个仓库里如果二进制文件过多,仓库的大小很快就会快速增长。

所以,如果要在 GitHub 上创作基于文字的内容,Microsoft Word 之类的文字处理软件是不符合要求的。初学者们第一个需要学会的就是如何在文本文档中创建格式——除非最简单的 *.txt 文件就满足了你的需求。最容易上手的是一种叫做 Markdown 的语法,它通过星号、横线、下划线和不同的括号可以实现粗体、斜体、列表、链接等功能;如果需要更复杂一些的功能,还可以直接在 Markdown 文档内插入 HTML 代码实现更加复杂的样式。除此之外,如果需要更复杂的格式需求,可以使用 LaTeX 之类的排版软件,它同样是基于文本的。GitHub 已经内建了非常好的 Markdown 支持,用户创建的 Markdown 文档可以直接在软件仓库页面渲染成带有样式的文字。如果搭配 GitHub Pages 使用,还可以将 Markdown 文件直接发布成网页。

遗憾的是,现在在移动端仍然没有许多支持 Git 的内容创作软件。大多数提供类似服务的软件,例如 Evernote 和 OneNote 等,都仅仅允许将内容上传到其公司私有的云服务器。从商业软件的角度来说,用户每个月订阅的云端同步功能是盈利的方式之一,为用户提供 Git 之类的同步功能对商业公司来说是吃力不讨好的事情。但对用户来说,提供这样的功能可以让我们对自己的数据有更多的控制权。

所以,如果要将自己的创作发布到 GitHub 上,至少一台电脑是必需的。虽然 GitHub 也提供网页端对 Markdown 文档的修改能力,但是更复杂的操作是需要一台电脑才能完成的。GitHub 目前正在进行移动端软件的内部测试工作,希望在软件发布之后,可以为手机或者平板电脑用户优化工作流,提供更多移动工作的可能。

过去大约十年的民用互联网应用的发展,中国和西方似乎是在不同的科技树上。因此,两边的网民对互联网的使用习惯是不同的。中国的互联网用户似乎对平台的依赖程度相当高,对于信息的获取过于依赖某一个平台,例如微信中的公众号或者小程序。同样地,这些公众号、小程序对微信这个平台也是无限的依赖。假设有一个以个人为单位的内容创作者利用微信平台创作内容,他的受众也局限在微信这个平台。如果因为某种原因,微信这一平台选择对其内容限流甚至封禁,对于这一内容创作者则是灭顶之灾。当然他可以存在于多个社交网络,但所谓的“全网封禁”也不是没有先例。

那西方的网络用户和内容创作者是什么形态的呢?首先,如果你是一个内容创作者,你可以利用各式各样的内容托管服务提供商发布自己的内容,绝大多数不会对内容本身有限制。如果你对服务提供商的限制不满意,可以选择自己在云服务提供商租用服务器、搭建网站。社交网络同样存在,但那不是一个内容发布的场所。创作者们利用社交网络将流量引导到自己的网站。即使社交网络和创作者价值观不符,所谓的“封禁”也无法让创作者遭受灭顶之灾。毕竟内容本身托管在其他平台,甚至创作者本身搭建的自有平台。对于用户来说,信息的获取渠道不仅仅存在一个或者几个程序里,信息可以从任何网站获取,手机程序在这一过程中不是必要的。假设我需要在网上购买商品,大众一些的产品我可能会选择亚马逊;而稍微小众一点的商品,我可能就会了解一下本国和附近一些国家有哪些网站有相对应的货源。对于普通人来说,是支持本地小型商业的发展,保证他们有足够的现金流生存下去;而对于那些商家来说,有一个独立的网站,是不被大企业支配的保证。

游走在两种生态之间,让我能够感受到两边用户不同的心态。同时,也因此越发地觉得纠正内容获取习惯的急迫性。

我们不应该过于依赖来自于同一个渠道的信息。我们无法得知在同一个渠道内是否能够包容不同的声音,也无法从同一个渠道内部证实信息的准确性。

我们应该从多种渠道获取信息。如果我们无法从一种渠道证实信息的准确性,那么我们应该尝试从其他渠道证实信息的准确性。

我们应该能够表达对信息的看法,不管是赞同还是质疑。我们应该能够包容他人对信息的看法,不管是否和我的意见一致。

作为一个弱小的个体,学会利用 GitHub 是一个开始,不管是用来查看他人的作品,还是开始自己的创作。

虽然 GitHub 现在在微软这个巨人的旗下,但是这在大陆的互联网用户能够触及的部分已经是少有的信息绿洲。尽管它在美国政府的压力之下于 2019 年 7 月起对来自伊朗、叙利亚和克里米亚地区的用户实施了一定的访问限制(例如无法使用私有仓库)并因此饱受批评,但对中国人来说仍然是相对安全的托管服务。因为大陆的互联网公司对于 GitHub 上丰富的软件仓库的依赖,在可见的未来,大陆用户应该还应该可以相对没有阻碍地访问 GitHub,但前提是用户的电脑和浏览器没有被污染。

为 AO3 惋惜的同时,我想起了以前 2014 年的国行 PS4 举报事件。两个事件惊人地相似,让我不得不怀疑我们的记忆有多长。什么时候,我们才能学会个人崇拜是错误的、因为他人意见和自己不合而发出的“举报”也是错误的?而且,在 2020 年的今天,仍然需要强调这些,本身就是一种悲哀。

什么时候,我们才能从我们的错误中吸取教训?