作家如何使用 GitHub 存储他们的作品

管理和存储写作项目的方法多种多样。 有些人偏爱使用云存储服务,比如Dropbox,或在线编辑器,例如Google Docs,而另一些人则倾向于使用桌面应用,像Microsoft Word。 我个人则选择使用一个名为GitHub的平台。

GitHub:不只是代码托管

我利用Git和GitHub来保存和访问我所有的写作作品。Git是一个强大的工具,可以追踪文档的修改,而且它能让你快速上传到GitHub。同时,将你的作品下载到第二或第三台设备也非常方便快捷。

如果你们不熟悉GitHub,它其实是世界上最受欢迎的开源代码存储和维护平台。 你可能会觉得把写作作品放在这里有点奇怪,但其实不然!毕竟,代码也是一行行的文本,和你写的文章、故事或者论文没什么不同。

大约在2013年,GitHub开始鼓励用户创建仓库来存放各种信息,而不仅仅是代码。虽然GitHub的核心依然是代码托管,但依然有人用它来存储写作作品和其他非代码项目。例如,有人用Git和GitHub写了一本指导书,还有人用它写了一本小说。如果你在网上搜索一下,你会发现GitHub有各种各样意想不到的用途。

Git和GitHub是什么?

Git是由Linus Torvalds开发的开源程序,他也是Linux的创始人。 Git能够追踪文档的更改,并且方便多人远程协作处理同一个文档。 从技术上讲,它被称为分布式版本控制系统(或分布式VCS)。 Git并不是按照固定的时间间隔保存文档的版本,它只会在你指示它的时候才存储文档的更改。

你的文档会形成一个“仓库”(或repo),这只是你的项目文件夹的一个更专业的称呼。 例如,如果你使用Git来管理Windows中的“文档”文件夹(当然,我并不建议你这样做),那么这个文件夹就成为了一个仓库。

当你使用Git存储对文档的更改时,这被称为“提交”。 提交只是你对文档所做的最新修改的记录。 每一次提交都会被分配一个由数字和字母组成的长ID。

如果你使用ID来查找过去的提交,你不会像在Word的文档历史记录中看到整个项目。你只会看到在该提交时所做的最新更改。但这并不意味着整个项目没有被记录。你可以删除项目文件夹中的所有写作内容,但仍然可以使用一些Git命令恢复到最新的版本。你甚至可以回溯到一周前或者六个月前你的项目的样子。

你还可以在每次提交中添加消息,这非常有用。例如,如果你写了一些内容,但不确定是否要保留它,你就可以先提交。即使你之后从项目中删除了这部分内容,它依然会保留在你的提交历史中。

Git在命令行上表现最佳,这是一个很大的优势,但也有缺点。命令行可以很好地创建提交并上传更改。但是,如果你想查看提交历史记录,它就不是那么理想了。

这正是很多人喜欢GitHub的原因——一个流行的在线服务,为你的Git仓库提供一个Web界面。在GitHub上,你可以轻松查看过去的提交,也可以将你的作品下载到多台电脑。

Git和GitHub一起使用,使我可以细粒度地控制我的版本历史。 可以在任何可以运行Bash命令的电脑上进行写作,包括Windows、Mac、Linux和Chrome OS设备。

纯文本文件让一切更简单

Git和GitHub几乎可以对任何文件类型进行提交,尽管它最适合纯文本。如果你使用Microsoft Word进行写作,它也可以工作,但是你无法在命令行或GitHub上看到你过去的提交。你必须在命令行中查找过去的提交(称为“检出”),然后打开你的Word文档。然后,你的Word文档会看起来像你最初提交时的样子,你可以使用另外一个快捷命令返回到当前的版本。

如果你使用Scrivener,它也同样适用。Scrivener将文件保存为文本,所以它也会在GitHub和命令行上显示过去的提交。但是Scrivener也会保存一些对程序很重要但对你并不重要的数据。每次提交,你都会得到很多难以阅读的垃圾。

我使用纯文本文件是因为这已经足够将文字组合在一起,特别是在最初的草稿阶段。

开始使用Git

让我们深入了解这一切是如何运作的技术细节。 我们将从你的电脑开始,然后通过GitHub迁移到云端。

要开始使用,你需要一个macOS或Linux上的终端程序。 如果你的计算机运行的是Windows 10,你必须通过Windows Subsystem for Linux (WSL) 安装Ubuntu或其他Linux发行版,这个过程非常简单。 你可以参考我们关于如何在Windows 10上安装Linux Bash shell的教程。 或者,如果你使用旧版本的Windows,你可以使用Cygwin来获取Bash shell。

打开终端,然后导航到你想要用作Git仓库的文件夹。 为了方便演示,假设我们在“文档”文件夹中有一个名为“MyNovel”的文件夹。请注意,我们的Git仓库的单词之间没有空格。如果你这样做,你会让事情变得简单,因为Bash不喜欢空格,处理它们会让人感到困惑。

接下来,在终端中导航到“MyNovel”文件夹。 在Windows 10中,可以使用以下命令:

cd /mnt/c/Users/[YourUserName]/Documents/MyNovel

任何与保存在Windows中的文件进行交互的WSL命令都必须使用`/mnt/`。 另外,请注意小写的“c”表示你所在的驱动器。 如果你的文件位于“D:/”驱动器上,请使用`/d/`。

对于macOS和Linux,命令要简单得多:

cd ~/Documents/MyNovel

从这里开始,命令都是相同的。

现在,我们必须将“MyNovel”文件夹初始化为Git仓库。 无论你刚刚开始写一本新小说,还是里面已经有一些保存的文件,这个命令都适用:

git init

你的文件夹现在变成了一个Git仓库。 不相信我? 输入:

ls -a

这个命令要求计算机列出当前文件夹中的所有内容,包括隐藏的项目。 你应该会在顶部看到一个名为“.git”的内容(注意句点)。 隐藏的“.git”文件夹是用来保存文档的版本历史记录的。 你永远不需要打开它,但它必须在那里。

第一次提交

在我们进行第一次提交之前,Git想要知道你的姓名和电子邮件地址。 Git使用这些信息来识别提交者,并将信息包含在提交日志中。 实际上,这并不重要,因为作家通常是独自工作,但Git仍然需要这些信息。

要设置你的电子邮件和地址,请执行以下操作:

git config --global user.email "[Your email]"

git config --global user.name "[Your name]"

就这样。 现在开始第一次提交。

假设“MyNovel”文件夹中有三个文档,分别名为:“Chapter1”、“Chapter2”和“Chapter3”。 要保存更改,我们必须告诉Git去追踪这些文件。 为此,请输入:

git add .

这个句点告诉Git去监视文件夹中所有未跟踪的文件(也就是你想要创建历史记录的文件)。这个命令也会告诉Git去准备任何当前正在跟踪的已更改的文件。这个过程被称为“暂存”文件以准备提交。

就我们的目的而言,“暂存”并非那么重要,但它可能会很有用。 如果你对“第2章”和“第3章”进行了更改,但是只想提交“第2章”中的更改,你可以这样暂存“第2章”:

git add Chapter2.doc

这告诉Git你只想让“第2章”中的更改准备提交,而不是“第3章”。

现在,是时候进行第一次提交了:

git commit -m "This is my first commit."

`-m`被称为标志,它告诉Git你想要提交并附加一条消息,你可以在引号之间看到它。我喜欢用提交信息来记录字数。我还使用它们来记录特殊的信息,例如:“本次提交包含了对Acme Widgets首席执行官的采访。”

如果我正在写一个故事,我可能会包含一条消息,例如:“本次提交加入了狗逃跑的新场景。” 有用的消息能让你更容易找到你的提交。

既然我们已经开始跟踪我们的文档,是时候使用GitHub将我们的文章放到云端了。 我使用GitHub作为额外的备份,一个可靠的查看文档更改的地方,以及在多台电脑上访问我的资料的方法。

开始使用GitHub

首先,你需要在GitHub上注册一个免费账户(你不需要付费账户来创建私人仓库)。 但是,你最多只能与三个人在私人仓库中协作。 如果你的团队有五人或五人以上在写一篇文章,你需要注册一个Pro账户(在本文写作时,每月需要7美元)。

创建账户后,让我们创建一个新的仓库。 登录你的账户,然后访问https://github.com/new

我们需要做的第一件事就是给仓库命名。 你可以使用与你在电脑上的文件夹相同的名称。 在“仓库名称”下,输入“MyNovel”。

“描述”是可选的,但我喜欢使用它。 你可以输入诸如“我关于一个男孩、一个女孩和他们的狗的精彩新小说”之类的内容。

接下来,选择“Private”单选按钮,但不要选中名为“Initialize this repository with a README”的复选框。 我们不需要这样做,因为我们在电脑上已经有了一个仓库。 如果我们现在创建一个README文件,事情将会变得更加复杂。

接下来,单击“创建仓库”。 在“快速设置——如果你以前做过这种事情”下,复制URL。 它看起来应该像这样:

https://github.com/[Your GitHub User Name]/MyNovel.git

现在,我们又回到了桌面和我们心爱的命令行。

将你的桌面仓库推送到云端

第一次将你的仓库连接到GitHub时,你必须使用一些专门的命令。 第一个命令是:

git remote add origin https://github.com/[Your GitHub User Name]/MyNovel.git

这告诉Git,远程仓库是“MyNovel”的来源。 然后URL将Git指向该远程源。“origin”只是一个约定俗成的名称,你也可以称它为“fluffy”,但“origin”更常用。

当你使用Git上传新的更改时,这称为“推送”。 当你下载更改时,称为“拉取”或“获取”。 现在,是时候将你的第一次提交推送到GitHub了。 你需要这样做:

git push -u origin master

系统将提示你输入GitHub用户名和密码。 如果你正确输入了凭据,所有内容都会上传,一切顺利。

如果你希望GitHub上传更加安全,你可以使用SSH密钥。 这允许你使用一个单独的密码来上传SSH密钥,这样你就不必每次都输入完整的GitHub凭据。 另外,只有拥有SSH密钥的人才能上传文件更改。

如果你想了解更多关于SSH密钥的信息,GitHub有关于如何使用它们的完整说明。 你也可以将你的Git凭据保存在你的电脑上

就这样! 现在,当你想要提交对文件的更改时,你可以使用以下三个简短的命令(在导航到“MyNovel”文件夹后):

git add .

翻译:“嘿,Git,请暂存所有未跟踪的文件,以及你已经跟踪的文件的新更改以准备提交。”

git commit -m "关于新iPhone评论的1000字。"

翻译:“嘿,Git,把这些更改与这条消息一起保存起来。”

git push origin master

翻译:“嘿,Git,上传我在电脑上的主副本的更改到GitHub上该项目的原始版本。”

Git和GitHub奖励提示

差不多就是这样了,但这里有一些额外的技巧可以让你更好地使用Git和GitHub:

查看过去的提交

要查看过去的提交,请访问GitHub上的“MyNovel”仓库。 在主页的顶部,“代码”标签下,你会看到一个部分,上面写着“[X]次提交”。

点击它,你会看到所有提交的列表。 点击你想要的提交,你会看到你的文本(如果你使用的是纯文本,而不是Word)。 绿色高亮显示的是创建提交时添加的新文本;红色高亮显示的是被删除的文本。

使用拉取命令

在不同的机器上获取一个新的仓库非常容易。 只需导航到你想要在新机器上保存仓库的位置,例如`cd ~/Documents`。 然后,输入:

git pull https://github.com/[Your GitHub User Name]/MyNovel.git

如果出现提示,请输入你的凭据,几秒钟后你就可以开始了。 现在,提交新的更改,然后通过`git push origin master`将它们发送回GitHub。 当你回到你通常工作的电脑时,只需打开命令行,导航到你的项目文件夹,然后输入`git pull`。 新的更改将下载,就像你的写作项目在你的设备上是最新的。

不要跨流

大多数时候,写作不是团队合作,只涉及一个人。 因此,本文以一种不适用于多人项目的方式使用Git。 具体来说,我们直接对我们小说的主版本进行了编辑,而不是创建所谓的“分支”。 分支是小说的练习版,可以在不影响原版主版本的情况下进行修改。 这就像你的小说同时存在两个不同的副本,而不会影响另一个。 如果你喜欢练习分支中的更改,你可以将它们合并到主版本(或主分支)中。 如果你不想这样做,那也没关系,你可以直接删除练习分支。

分支非常强大,使用它们是多个作者在同一个项目上进行协作的主要工作流程。 但是我认为,个人写作者并不真的需要使用分支,前提是你不同时在多台电脑上对主分支进行不同的修改。

例如,你应该在桌面上完成工作,进行提交,然后将更改推送到GitHub。 然后,在你进行任何进一步的编辑之前,切换到你的笔记本电脑,并拉取所有新的更改。 如果你不这样做,你最终可能会遇到Git所说的“冲突”。 当出现冲突时,Git会说:“嘿,GitHub和这台电脑上的更改不匹配。 帮我解决这个问题。”

解决冲突可能会很痛苦,因此最好尽可能避免。

一旦你开始使用Git,你可以学习很多东西,比如分支、获取和拉取之间的区别,GitHub的拉取请求是什么,以及如何处理可怕的冲突。

对于新手来说,Git可能看起来很复杂,但是一旦你掌握了它,它就是一个强大的工具,你可以用来管理和存储你的写作。