Git 是一款罕见的应用程序,它设法将现代计算的许多方面封装到一个程序中,最终成为许多其他应用程序的计算引擎。虽然它最出名的是跟踪软件开发中的源代码更改,但它还有许多其他用途,可以使你的生活更轻松和更有条理。在 Git 4 月 7 日 14 周年纪念日之前的这个系列中,我们将分享使用 Git 的七种鲜为人知的方式。今天,我们将了解作家如何使用 Git 来更好地完成工作。
Git 对于作家
有些人写小说;另一些人写学术论文、诗歌、剧本、技术手册或关于开源的文章。很多人每种都写一点。共同点是,如果你是作家,你可能会受益于使用 Git。虽然 Git 众所周知是一种由计算机程序员使用的高度技术性工具,但它是现代作家的理想选择,本文将演示它如何改变你的写作方式——以及你为什么需要它。
在讨论 Git 之前,重要的是要讨论副本(或数字时代的内容)的真正含义,以及它为何不同于你的交付媒介。现在是 21 世纪,大多数作家选择的工具是计算机。虽然计算机在将复制编辑和布局等流程结合起来方面非常出色,但作家们正在(重新)发现将内容与样式分离毕竟是个好主意。这意味着你应该像使用打字机一样在计算机上写作,而不是像使用文字处理器。用计算机术语来说,这意味着用纯文本写作。
用纯文本写作
过去,你可以安全地假设你知道你在为哪个市场写作。你为一本书、一个网站或一个软件手册编写内容。但如今,市场已经扁平化:你可能会决定将你为网站编写的内容用于印刷书籍项目,而印刷书籍可能会稍后发布 EPUB 版本。就你的内容的数字版本而言,阅读你的内容的人拥有最终控制权:他们可能会在您发布内容的网站上阅读你的文字,或者他们可能会单击 Firefox 的优秀 阅读视图,或者他们可能会打印到物理纸张上,或者他们可以用 Lynx 将网页转储到文本文件中,或者他们可能根本看不到你的内容,因为他们使用屏幕阅读器。
将你的文字写成文字是有意义的,将交付留给出版商。即使你也是自己的出版商,将你的文字视为写作的一种源代码也是一种更明智、更有效的工作方式,因为当发布时机到来时,你可以使用相同的源代码(你的纯文本)来生成适合你的目标的输出(用于打印的 PDF、用于电子书的 EPUB、用于网站的 HTML 等)。
用纯文本写作不仅意味着你无需担心布局或文本的样式,而且你也不再需要专门的工具。任何可以生成文本的东西都成为你有效的“文字处理器”,无论是你的手机或平板电脑上的基本记事本应用程序,还是你的计算机捆绑的文本编辑器,还是你从互联网上下载的免费编辑器。你几乎可以在任何设备上写作,无论你在哪里或你在做什么,并且你生成的文本与你的项目完美集成,无需修改。
而且,方便的是,Git 专门用于管理纯文本。
Atom 编辑器
当你在纯文本中写作时,文字处理器就显得多余了。使用文本编辑器更容易,因为文本编辑器不会试图“有帮助地”重组你的输入。它可以让你将你脑海中的文字键入到屏幕上,没有任何干扰。更好的是,文本编辑器通常围绕插件架构设计,因此应用程序本身非常基础(它编辑文本),但你可以在它周围构建一个环境来满足你的每一个需求。
这种设计理念的一个很好的例子是 Atom 编辑器。它是一个跨平台文本编辑器,具有内置的 Git 集成。如果你是纯文本和 Git 的新手,Atom 是入门的最简单方法。
安装 Git 和 Atom
首先,确保你的系统上已安装 Git。如果你运行 Linux 或 BSD,Git 在你的软件存储库或端口树中可用。你使用的命令将因你的发行版而异;例如,在 Fedora 上
$ sudo dnf install git
你也可以下载并安装 Git for Mac and Windows。
你不需要直接使用 Git,因为 Atom 充当你的 Git 界面。安装 Atom 是下一步。
如果你使用的是 Linux,请通过你的软件安装程序或相应的命令(例如
$ sudo dnf install atom
Atom 目前没有在 BSD 上构建。但是,有非常好的替代方案可用,例如 GNU Emacs。对于 Mac 和 Windows 用户,你可以在 Atom 网站上找到安装程序。
安装完成后,启动 Atom 编辑器。
快速浏览
如果你要使用纯文本和 Git,你需要熟悉你的编辑器。Atom 的用户界面可能比你习惯的更动态。实际上,你可以把它看作更像是 Firefox 或 Chrome,而不是文字处理器,因为它有可以根据需要打开和关闭的选项卡和面板,甚至还有你可以安装和配置的插件。试图涵盖 Atom 的所有众多功能是不切实际的,但你至少可以熟悉一下可能的功能。
当 Atom 打开时,它会显示一个欢迎屏幕。如果没有任何其他内容,此屏幕也是对 Atom 的选项卡式界面的良好介绍。你可以通过单击 Atom 窗口顶部选项卡上的“关闭”图标来关闭欢迎屏幕,并使用 文件 > 新建文件创建新文件。
用纯文本工作与在文字处理器中工作略有不同,因此以下是一些以人类可以连接的方式以及 Git 和计算机可以解析、跟踪和转换的方式编写内容的技巧。
用 Markdown 编写
现在,当人们谈论纯文本时,他们主要指的是 Markdown。Markdown 更多的是一种风格而不是一种格式,这意味着它旨在为你的文本提供可预测的结构,以便计算机可以检测自然模式并智能地转换文本。Markdown 有许多定义,但最好的技术定义和备忘单在 CommonMark 的网站上。
# Chapter 1
This is a paragraph with an *italic* word and a **bold** word in it.
And it can even reference an image.

正如你可以从示例中看出的那样,Markdown 并不是要像代码一样阅读或感觉,但它可以被视为代码。如果你遵循 CommonMark 定义的 Markdown 的期望,那么只需单击一个按钮,你就可以可靠地将你的写作从 Markdown 转换为 .docx、.epub、.html、MediaWiki、.odt、.pdf、.rtf 和其他十几种格式,而不会丢失格式。
你可以将 Markdown 视为文字处理器的样式。如果你曾经为出版商编写过一套管理章节标题和小节标题外观的样式,这基本上是相同的事情,除了你不是从下拉菜单中选择样式,而是向你的文本添加一些小注释。这些注释对于任何习惯于“txt 语言”的现代读者来说看起来都很自然,但在渲染文本时会被替换为精美的文本样式。事实上,这就是文字处理器在幕后秘密所做的事情。文字处理器显示粗体文本,但如果你可以看到为使你的文本变为粗体而生成的代码,它会很像 Markdown(实际上它是更复杂的 XML)。使用 Markdown,该障碍被消除了,一方面看起来更可怕,但另一方面,你可以在生成文本的任何内容上编写 Markdown,而不会丢失任何格式信息。
Markdown 文件的流行文件扩展名是 .md。如果你使用的平台不知道 .md 文件是什么,你可以手动将扩展名与 Atom 关联,或者只使用通用的 .txt 扩展名。文件扩展名不会改变文件的性质;它只是改变了你的计算机决定如何处理它的方式。Atom 和某些平台足够智能,可以知道文件是纯文本,无论你给它什么扩展名。
实时预览
Atom 具有 Markdown 预览插件,该插件显示你正在编写的纯 Markdown 以及它(通常)将呈现的方式。

要激活此预览窗格,请选择 软件包 > Markdown 预览 > 切换预览或按 Ctrl+Shift+M。
此视图为你提供了两全其美。你可以写作而无需承担设置文本样式的负担,但你也可以看到你的文本在典型数字格式中的常见示例。当然,关键是你无法控制你的文本的最终呈现方式,所以不要试图调整你的 Markdown 来强制你的渲染预览看起来像某种方式。
每行一个句子
你的高中写作老师不必看到你的 Markdown。
起初这不会很自然,但在数字世界中,保持每行一个句子更有意义。Markdown 忽略单行换行符(当你按下 Return 或 Enter 键时),并且只在单个空行后创建新段落。

每行写一个句子的优点是你的工作更容易被跟踪。也就是说,如果你更改了段落开头的某个单词,那么如果更改仅限于一行而不是长段落中的一个单词,Atom、Git 或任何应用程序都可以以有意义的方式突出显示该更改。换句话说,对一个句子的更改应该只影响该句子,而不是整个段落。
你可能会想,“很多文字处理器也能追踪更改,而且还能高亮显示单个被更改的词。” 但是那些修订追踪器都受限于该文字处理器的界面,这意味着你必须打开那个文字处理器才能查看修订。在一个纯文本工作流程中,你可以用纯文本查看修订,这意味着无论你手头有什么设备,只要它能处理纯文本(大多数设备都可以),你都可以进行或批准编辑。
诚然,作家通常不会用行号来思考,但对于计算机来说,这是一个有用的工具,并且最终会成为一个很棒的参考点。Atom 默认会对你的文本文档进行行编号。只有当你按下 Enter 或 Return 键时,才算新起一行。

如果某一行显示的是点而不是数字,则意味着它是上一行因为无法在你的屏幕上完整显示而自动换行后的部分。
主题化
如果你是一个视觉型的人,你可能会对你的写作环境的外观非常讲究。即使你正在编写纯 Markdown,这也不意味着你必须使用程序员的字体,或者在一个让你看起来像程序员的黑暗窗口中写作。修改 Atom 外观的最简单方法是使用主题包。主题设计师通常会将深色主题和浅色主题区分开来,因此你可以使用关键字 Dark 或 Light 进行搜索,具体取决于你想要什么。
要安装主题,请选择**Edit > Preferences**(编辑 > 首选项)。这将在 Atom 界面中打开一个新标签页。是的,标签页既可以用于你的工作文档,也可以用于配置和控制面板。在 **Settings**(设置)选项卡中,单击 **Install**(安装)类别。
在 **Install**(安装)面板中,搜索你想要安装的主题的名称。单击搜索字段右侧的 **Themes**(主题)按钮,仅搜索主题。找到你的主题后,单击其 **Install**(安装)按钮。

要使用你已安装的主题或自定义主题以符合你的偏好,请导航到 **Settings**(设置)选项卡中的 **Themes**(主题)类别。从下拉菜单中选择你要使用的主题。更改会立即生效,因此你可以准确地看到主题如何影响你的环境。
你还可以在 **Settings**(设置)选项卡的 **Editor**(编辑器)类别中更改你的工作字体。Atom 默认使用等宽字体,通常是程序员的首选。但是你可以使用系统上的任何字体,无论是衬线字体、非衬线字体、哥特字体还是手写体。无论你想要整天盯着什么字体看,这完全取决于你。
与此相关的是,默认情况下,Atom 会在其屏幕上绘制一条垂直标记线,作为人们编写代码的指南。程序员通常不希望编写过长的代码行,因此这条垂直线提醒他们简化代码。但是,对于作家来说,这条垂直线毫无意义,你可以通过禁用 **wrap-guide** 包来移除它。
要禁用 **wrap-guide** 包,请在 **Settings**(设置)选项卡中选择 **Packages**(包)类别,然后搜索 **wrap-guide**。找到该包后,单击其 **Disable**(禁用)按钮。
动态结构
在创建长文档时,我发现每个文件写一个章节比在一个文件中写完整本书更有意义。此外,我不会以明显的语法 **chapter-1.md** 或 **1.example.md** 来命名我的章节,而是使用章节标题或关键字,例如 **example.md**。为了将来给自己提供关于本书应该如何组装的指导,我维护一个名为 **toc.md**(代表“目录”)的文件,我在其中列出章节的(当前)顺序。
我这样做是因为,无论我多么确信第 6 章不可能在第 1 章之前发生,但在我完成一本书之前,我很少不会交换一个或两个章节或部分的顺序。我发现从一开始就保持它的动态性有助于我避免重命名混乱,并且还有助于我更灵活地处理材料。
Atom 中的 Git
每个作家都有两个共同点:他们都是为了保存而写作,而且他们的写作是一个旅程。你不是坐下来写完就得到最终稿;根据定义,你先有一个初稿。然后该草稿会经历修订,每次修订你都会小心地保存两份或三份,以防其中一个文件损坏。最终,你得到了你所谓的最终稿,但很可能有一天你会回去修改它,要么是为了复活好的部分,要么是为了修复坏的部分。
Atom 中最令人兴奋的功能是它强大的 Git 集成。无需离开 Atom,你就可以与 Git 的所有主要功能进行交互,跟踪和更新你的项目,回滚你不喜欢的更改,集成来自合作者的更改等等。学习它的最佳方法是逐步学习,因此以下是如何从写作项目的开始到结束在 Atom 界面中使用 Git。
首先:通过选择 **View > Toggle Git Tab**(视图 > 切换 Git 选项卡)来显示 Git 面板。这会在 Atom 界面的右侧打开一个新的选项卡。现在没什么可看的,所以暂时保持打开状态即可。
启动 Git 项目
你可以将 Git 视为绑定到一个文件夹。Git 目录之外的任何文件夹都不知道 Git,Git 也不会知道它们。Git 目录中的文件夹和文件会被忽略,直到你授予 Git 跟踪它们的权限。
你可以通过在 Atom 中创建一个新的项目文件夹来创建一个 Git 项目。选择 **File > Add Project Folder**(文件 > 添加项目文件夹),并在你的系统上创建一个新的文件夹。你创建的文件夹会出现在 Atom 窗口的左侧 **Project Panel**(项目面板)中。
Git 添加
右键单击你的新项目文件夹,然后选择 **New File**(新建文件)以在你的项目文件夹中创建一个新文件。如果你有想要导入到你的新项目中的文件,请右键单击该文件夹,然后选择 **Show in File Manager**(在文件管理器中显示)以在你的系统文件查看器(Linux 上的 Dolphin 或 Nautilus,Mac 上的 Finder,Windows 上的 Explorer)中打开该文件夹,然后拖放你的文件。
在 Atom 中打开一个项目文件(无论是你创建的空文件还是你导入的文件),然后单击 **Git** 选项卡中的 **Create Repository**(创建仓库)按钮。在弹出的对话框中,单击 **Init**(初始化)以将你的项目目录初始化为本地 Git 仓库。Git 会将一个 **.git** 目录(在你的系统文件管理器中不可见,但在 Atom 中对你可见)添加到你的项目文件夹。不要被这个迷惑:**.git** 目录是供 Git 管理的,而不是供你管理的,因此你通常不会进入它。但是在 Atom 中看到它是对你正在积极地由 Git 管理的项目中工作的一个很好的提醒;换句话说,当你看到一个 **.git** 目录时,修订历史记录是可用的。
在你的空文件中,写一些东西。你是一个作家,所以输入一些文字。它可以是你喜欢的任何一组文字,但请记住上面的写作技巧。
按 **Ctrl+S** 保存你的文件,它会出现在 **Git** 选项卡的 **Unstaged Changes**(未暂存的更改)部分中。这意味着该文件存在于你的项目文件夹中,但尚未提交到 Git 的管辖范围。通过单击 **Git** 选项卡右上角的 **Stage All**(暂存全部)按钮,允许 Git 跟踪你的文件。如果你使用过带有修订历史记录的文字处理器,你可以将此步骤视为允许 Git 记录更改。
Git 提交
你的文件现在已被暂存。所有这些都意味着 Git 知道该文件存在,并且知道自上次 Git 知道该文件以来它已被更改。
Git 提交会将你的文件发送到 Git 的内部和永久存档中。如果你习惯于使用文字处理器,这类似于命名一个修订。要创建提交,请在 **Git** 选项卡底部的 **Commit**(提交)消息框中输入一些描述性文本。你可以含糊不清或厚颜无耻,但如果你为未来的自己输入有用的信息会更有用,这样你就知道为什么进行修订了。
第一次进行提交时,你必须创建一个分支。Git 分支有点像替代现实,允许你从一个时间线切换到另一个时间线,以进行你可能想要或不想要永久保留的更改。如果你最终喜欢这些更改,你可以将一个实验分支合并到另一个分支中,从而统一项目的不同版本。这是一个高级过程,不值得预先学习,但你仍然需要一个活动分支,因此你必须为你的第一次提交创建一个分支。
单击 **Git** 选项卡最底部的 **Branch**(分支)图标以创建一个新分支。

习惯上将你的第一个分支命名为 **master**。你不必这样做;你可以将其命名为 **firstdraft** 或任何你喜欢的名称,但是遵守当地的习俗有时可以使讨论 Git(并查找问题的答案)更容易一些,因为你会知道当有人提到 **master** 时,他们实际上指的是 **master** 而不是 **firstdraft** 或你称呼你的分支的任何名称。
在某些版本的 Atom 上,UI 可能不会更新以反映你已创建了一个新分支。不用担心;一旦你进行提交,该分支将被创建(并且 UI 将被更新)。按 **Commit**(提交)按钮,无论它显示 **Create detached commit**(创建分离的提交)还是 **Commit to master**(提交到 master)。
一旦你进行了提交,你的文件的状态将永远保存在 Git 的内存中。
历史记录和 Git diff
一个很自然的问题是,你应该多久提交一次 (commit)?对此没有一个正确的答案。用 Ctrl+S 保存文件和提交到 Git 是两个独立的过程,所以你需要继续做这两件事。你可能想在完成一些重要的工作或者准备尝试一个疯狂的新想法(并且可能想要撤销它)时进行提交。
为了感受提交对你的工作流程的影响,从你的测试文档中删除一些文本,并在顶部和底部添加一些文本。再次提交。重复几次,直到你的 Git 选项卡底部出现一个小的历史记录,然后点击一个提交在 Atom 中查看它。

当查看过去的提交时,你会看到三个要素:
- 绿色的文本是在提交时添加到文档中的。
- 红色的文本是在提交时从文档中删除的。
- 所有其他文本都保持不变。
远程备份
使用 Git 的一个优点是,它在设计上是分布式的,这意味着你可以将你的工作提交到你的本地仓库,并将你的更改推送到任意数量的服务器进行备份。你也可以从这些服务器拉取更改,以便你正在使用的任何设备始终拥有最新的更改。
要做到这一点,你必须在 Git 服务器上拥有一个帐户。有很多免费的托管服务,包括 GitHub,它是生产 Atom 的公司,但奇怪的是它不是开源的,还有 GitLab,它是开源的。我更喜欢开源而不是专有,所以在这个例子中我将使用 GitLab。
如果你还没有 GitLab 帐户,请注册一个并开始一个新项目。项目名称不必与 Atom 中的项目文件夹匹配,但如果匹配的话可能更有意义。你可以将你的项目设为私有,在这种情况下,只有你和你明确授权的人才能访问它,或者你可以将其设为公开,如果你想让互联网上的任何人都可以访问它。
不要向项目添加 README 文件。
创建项目后,它会为你提供有关如何设置存储库的说明。如果你决定在终端或使用单独的 GUI 中使用 Git,这是一个很好的信息,但 Atom 的工作流程是不同的。
点击 GitLab 界面右上角的 Clone 按钮。 这会显示你必须用于访问 Git 存储库的地址。 复制 SSH 地址(而不是 https 地址)。
在 Atom 中,点击你的项目的 .git 目录并打开 config 文件。将这些配置行添加到该文件,调整 seth/example.git 部分的 url 值以匹配你的唯一地址。
[remote "origin"]
url = git@gitlab.com:seth/example.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
在 Git 选项卡的底部,出现了一个新按钮,标记为 Fetch。由于你的服务器是全新的,因此没有数据可供你获取,请右键单击该按钮并选择 Push。这将你的更改推送到你的 Gitlab 帐户,现在你的项目已备份在 Git 服务器上。
将更改推送到服务器是在每次提交后都可以执行的操作。它提供了立即的异地备份,并且由于数据量通常很小,因此它实际上与本地保存一样快。
写作和 Git
Git 是一个复杂的系统,不仅仅可以用于版本跟踪和备份。它支持异步协作并鼓励实验。本文介绍了基础知识,但关于 Git 以及如何使用它使你的工作更高效、更具弹性和更具动态性的文章和书籍还有很多。这一切都始于使用 Git 进行小任务。你使用得越多,你就会发现自己提出的问题越多,最终你会学到更多的技巧。
2 条评论