如果你是一名寫作者,你也能從使用 Git 中受益。在我們的系列文章中了解有關 Git 鮮為人知的用法。
Git 是一個少有的能將如此多的現代計算封裝到一個程式之中的應用程式,它可以用作許多其他應用程式的計算引擎。雖然它以跟蹤軟體開發中的原始碼更改而聞名,但它還有許多其他用途,可以讓你的生活更輕鬆、更有條理。在這個 Git 系列中,我們將分享七種鮮為人知的使用 Git 的方法。
今天我們來看看寫作者如何使用 Git 更好的地完成工作。
有些人寫小說,也有人撰寫學術論文、詩歌、劇本、技術手冊或有關開源的文章。許多人都在做一些各種寫作。相同的是,如果你是一名寫作者,或許能從使用 Git 中受益。儘管 Git 是著名的計算機程式設計師所使用的高度技術性工具,但它也是現代寫作者的理想之選,本文將向你演示如何改變你的書寫方式以及為什麼要這麼做的原因。
但是,在談論 Git 之前,重要的是先談談“副本”(或者叫“內容”,對於數位時代而言)到底是什麼,以及為什麼它與你的交付媒介不同。這是 21 世紀,大多數寫作者選擇的工具是計算機。儘管計算機看似擅長將副本的編輯和布局等過程結合在一起,但寫作者還是(重新)發現將內容與樣式分開是一個好主意。這意味著你應該在計算機上像在打字機上而不是在文書處理器中進行書寫。以計算機術語而言,這意味著以純文字形式寫作。
這個假設曾經是毫無疑問的:你知道自己的寫作所要針對的市場,你可以為書籍、網站或軟體手冊等不同市場編寫內容。但是,近來各種市場趨於扁平化:你可能決定在紙質書中使用為網站編寫的內容,並且紙質書可能會在以後發布 EPUB 版本。對於你的內容的數位版本,讀者才是最終控制者:他們可以在你發布內容的網站上閱讀你的文字,也可以點選 Firefox 出色的閱讀檢視,還可能會列印到紙張上,或者可能會使用 Lynx 將網頁轉儲到文字檔案中,甚至可能因為使用螢幕閱讀器而根本看不到你的內容。
你只需要逐字寫下你的內容,而將交付工作留給發佈者。即使你是自己發布,將字詞作為寫作作品的一種原始碼也是一種更聰明、更有效的工作方式,因為在發布時,你可以使用相同的源(你的純文字)生成適合你的目標輸出(用於列印的 PDF、用於電子書的 EPUB、用於網站的 HTML 等)。
用純文字編寫不僅意味著你不必擔心布局或文字樣式,而且也不再需要專門的工具。無論是手機或平板電腦上的基本的記事本應用程式、計算機附帶的文字編輯器,還是從網際網路上下載的免費編輯器,任何能夠產生文字內容的工具對你而言都是有效的“文書處理器”。無論你身在何處或在做什麼,幾乎可以在任何裝置上書寫,並且所生成的文字可以與你的專案完美整合,而無需進行任何修改。
而且,Git 專門用來管理純文字。
當你以純文字形式書寫時,文書處理程式會顯得過於龐大。使用文字編輯器更容易,因為文字編輯器不會嘗試“有效地”重組輸入內容。它使你可以將腦海中的單詞輸入到螢幕中,而不會受到干擾。更好的是,文字編輯器通常是圍繞外掛體系結構設計的,這樣應用程式本身很基礎(它用來編輯文字),但是你可以圍繞它構建一個環境來滿足你的各種需求。
Atom 編輯器就是這種設計理念的一個很好的例子。這是一個具有內建 Git 整合的跨平台文字編輯器。如果你不熟悉純文字格式,也不熟悉 Git,那麼 Atom 是最簡單的入門方法。
首先,請確保你的系統上已安裝 Git。如果執行 Linux 或 BSD,則 Git 在軟體儲存庫或 ports 樹中可用。你使用的命令將根據你的發行版而有所不同。例如在 Fedora 上:
$ sudo dnf install git
你也可以下載並安裝適用於 Mac 和 Windows 的 Git。
你不需要直接使用 Git,因為 Atom 會充當你的 Git 介面。下一步是安裝 Atom。
如果你使用的是 Linux,請通過軟體安裝程式或適當的命令從軟體儲存庫中安裝 Atom,例如:
$ sudo dnf install atom
Atom 當前沒有在 BSD 上構建。但是,有很好的替代方法,例如 GNU Emacs。對於 Mac 和 Windows 使用者,可以在 Atom 網站上找到安裝程式。
安裝完成後,啟動 Atom 編輯器。
如果要使用純文字和 Git,則需要適應你的編輯器。Atom 的使用者介面可能比你習慣的更加動態。實際上,你可以將它視為 Firefox 或 Chrome,而不是文書處理程式,因為它具有可以根據需要開啟或關閉的索引標籤和面板,甚至還可以安裝和設定附件。嘗試全部掌握 Atom 如許之多的功能是不切實際的,但是你至少可以知道有什麼功能。
當開啟 Atom 時,它將顯示一個歡迎螢幕。如果不出意外,此螢幕很好地介紹了 Atom 的索引標籤式介面。你可以通過單擊 Atom 視窗頂部索引標籤上的“關閉”圖示來關閉歡迎螢幕,並使用“檔案 > 新建檔案”建立一個新檔案。
使用純文字格式與使用文書處理程式有點不同,因此這裡有一些技巧,以人可以理解的方式編寫內容,並且 Git 和計算機可以解析,跟蹤和轉換。
如今,當人們談論純文字時,大多是指 Markdown。Markdown 與其說是格式,不如說是樣式,這意味著它旨在為文字提供可預測的結構,以便計算機可以檢測自然的模式並智慧地轉換文字。Markdown 有很多定義,但是最好的技術定義和備忘清單在 CommonMark 的網站上。
# Chapter 1This is a paragraph with an *italic* word and a **bold** word in it.And it can even reference an image.![An image will render here.](drawing.jpg)
從範例中可以看出,Markdown 讀起來感覺不像程式碼,但可以將其視為程式碼。如果你遵循 CommonMark 定義的 Markdown 規範,那麼一鍵就可以可靠地將 Markdown 的文字轉換為 .docx、.epub、.html、MediaWiki、.odt、.pdf、.rtf 和各種其他的格式,而不會失去格式。
你可以認為 Markdown 有點像文書處理程式的樣式。如果你曾經為出版社撰寫過一套樣式來控制章節標題及其樣式,那基本上就是一回事,除了不是從下拉式選單中選擇樣式以外,你需要給你的文字新增一些小記號。對於任何習慣“以文字交談”的現代閱讀者來說,這些表示法都是很自然的,但是在呈現文字時,它們會被精美的文字樣式替換掉。實際上,這就是文書處理程式在後台祕密進行的操作。文書處理器顯示粗體文字,但是如果你可以看到使文字變為粗體的生成程式碼,則它與 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
鍵後,一行就是一行。
如果(在 Atom 的)一行的行號中有一個點而不是一個數位,則表示它是上一行折疊的一部分,因為它超出了你的螢幕。
如果你是一個在意視覺形象的人,那麼你可能會非常注重自己的寫作環境。即使你使用普通的 Markdown 進行編寫,也並不意味著你必須使用程式設計師的字型或在使你看起來像碼農的黑視窗中進行書寫。修改 Atom 外觀的最簡單方法是使用主題包。主題設計人員通常將深色主題與淺色主題區分開,因此你可以根據需要使用關鍵字“Dark”或“Light”進行搜尋。
要安裝主題,請選擇“編輯 > 偏好設定”。這將在 Atom 介面中開啟一個新分頁。是的,分頁可以用於處理文件和用於設定及控制面板。在“設定”分頁中,單擊“安裝”類別。
在“安裝”面板中,搜尋要安裝的主題的名稱。單擊搜尋欄位右側的“主題”按鈕,以僅搜尋主題。找到主題後,單擊其“安裝”按鈕。
要使用已安裝的主題或根據喜好自定義主題,請導航至“設定”分頁中的“主題”類別中。從下拉式選單中選擇要使用的主題。更改會立即進行,因此你可以準確了解主題如何影響你的環境。
你也可以在“設定”標籤的“編輯器”類別中更改工作字型。Atom 預設採用等寬字型,程式設計師通常首選這種字型。但是你可以使用系統上的任何字型,無論是襯線字型、無襯線字型、哥特式字型還是草書字型。無論你想整天盯著什麼字型都行。
作為相關說明,預設情況下,Atom 會在其螢幕上繪製一條垂直線,以提示編寫程式碼的人員。程式設計師通常不想編寫太長的程式碼行,因此這條垂直線會提醒他們不要寫太長的程式碼行。不過,這條豎線對寫作者而言毫無意義,你可以通過禁用 “wrap-guide” 包將其刪除。
要禁用 “wrap-guide” 軟體包,請在“設定”標籤中選擇“折行”類別,然後搜尋 “wrap-guide”。找到該程式包後,單擊其“禁用”按鈕。
建立長文件時,我發現每個檔案寫一個章節比在一個檔案中寫整本書更有意義。此外,我不會以明顯的語法 chapter-1.md
或 1.example.md
來命名我的章節,而是以章節標題或關鍵詞(例如 example.md
)命名。為了將來為自己提供有關如何編寫本書的指導,我維護了一個名為 toc.md
(用於“目錄”)的檔案,其中列出了各章的(當前)順序。
我這樣做是因為,無論我多麼相信第 6 章都不可能出現在第 1 章之前,但在我完成整本書之前,幾乎難以避免我會交換一兩個章節的順序。我發現從一開始就保持動態變化可以幫助我避免重新命名混亂,也可以幫助我避免僵化的結構。
每位寫作者的共同點是兩件事:他們為流傳而寫作,而他們的寫作是一段旅程。你不能一坐下來寫作就完成了最終稿件。顧名思義,你有一個初稿。該草稿會經過修訂,你會仔細地將每個修訂儲存一式兩份或三份的備份,以防萬一你的檔案損壞了。最終,你得到了所謂的最終草稿,但很有可能你有一天還會回到這份最終草稿,要麼恢復好的部分,要麼修改壞的部分。
Atom 最令人興奮的功能是其強大的 Git 整合。無需離開 Atom,你就可以與 Git 的所有主要功能進行互動,跟蹤和更新專案、回滾你不喜歡的更改、整合來自共同作業者的更改等等。最好的學習方法就是逐步學習,因此這是在一個寫作專案中從始至終在 Atom 介面中使用 Git 的方法。
第一件事:通過選擇 “檢視 > 切換 Git 分頁” 來顯示 Git 面板。這將在 Atom 介面的右側開啟一個新分頁。現在沒什麼可看的,所以暫時保持開啟狀態就行。
你可以認為 Git 被系結到一個資料夾。Git 目錄之外的任何資料夾都不知道 Git,而 Git 也不知道外面。Git 目錄中的資料夾和檔案將被忽略,直到你授予 Git 許可權來跟蹤它們為止。
你可以通過在 Atom 中建立新的專案資料夾來建立 Git 專案。選擇 “檔案 > 新增專案資料夾”,然後在系統上建立一個新資料夾。你建立的資料夾將出現在 Atom 視窗的左側“專案面板”中。
右鍵單擊你的新專案資料夾,然後選擇“新建檔案”以在專案資料夾中建立一個新檔案。如果你要匯入檔案到新專案中,請右鍵單擊該資料夾,然後選擇“在檔案管理器中顯示”,以在系統的檔案檢視器中開啟該資料夾(Linux 上為 Dolphin 或 Nautilus,Mac 上為 Finder,在 Windows 上是 Explorer),然後拖放檔案到你的專案資料夾。
在 Atom 中開啟一個專案檔案(你建立的空檔案或匯入的檔案)後,單擊 Git 標籤中的 “建立儲存庫” 按鈕。在彈出的對話方塊中,單擊 “初始化” 以將你的專案目錄初始化為本地 Git 儲存庫。 Git 會將 .git
目錄(在系統的檔案管理器中不可見,但在 Atom 中可見)新增到專案資料夾中。不要被這個愚弄了:.git
目錄是 Git 管理的,而不是由你管理的,因此一般你不要動它。但是在 Atom 中看到它可以很好地提醒你正在由 Git 管理的專案中工作。換句話說,當你看到 .git
目錄時,就有了修訂歷史記錄。
在你的空檔案中,寫一些東西。你是寫作者,所以輸入一些單詞就行。你可以隨意輸入任何一組單詞,但要記住上面的寫作技巧。
按 Ctrl + S
儲存檔案,該檔案將顯示在 Git 標籤的 “未暫存的改變” 部分中。這意味著該檔案存在於你的專案資料夾中,但尚未提交給 Git 管理。通過單擊 Git 索引標籤右上方的 “暫存全部” 按鈕,以允許 Git 跟蹤這些檔案。如果你使用過帶有修訂歷史記錄的文書處理器,則可以將此步驟視為允許 Git 記錄更改。
你的檔案現在已暫存。這意味著 Git 知道該檔案存在,並且知道自上次 Git 知道該檔案以來,該檔案已被更改。
Git 的提交會將你的檔案傳送到 Git 的內部和永久存檔中。如果你習慣於文書處理程式,這就類似於給一個修訂版命名。要建立一個提交,請在 Git 索引標籤底部的“提交”訊息方塊中輸入一些描述性文字。你可能會感到含糊不清或隨意寫點什麼,但如果你想在將來知道進行修訂的原因,那麼輸入一些有用的資訊會更有用。
第一次提交時,必須建立一個分支。Git 分支有點像另外一個空間,它允許你從一個時間軸切換到另一個時間軸,以進行你可能想要也可能不想要永久保留的更改。如果最終喜歡該更改,則可以將一個實驗分支合併到另一個實驗分支,從而統一專案的不同版本。這是一個高階過程,不需要先學會,但是你仍然需要一個活動分支,因此你必須為首次提交建立一個分支。
單擊 Git 索引標籤最底部的“分支”圖示,以建立新的分支。
通常將第一個分支命名為 master
,但不是必須如此;你可以將其命名為 firstdraft
或任何你喜歡的名稱,但是遵守當地習俗有時會使談論 Git(和查詢問題的答案)變得容易一些,因為你會知道有人提到 “master” 時,它們的真正意思是“主幹”而不是“初稿”或你給分支起的什麼名字。
在某些版本的 Atom 上,UI 也許不會更新以反映你已經建立的新分支。不用擔心,做了提交之後,它會建立分支(並更新 UI)。按下 “提交” 按鈕,無論它顯示的是 “建立脫離的提交” 還是 “提交到主幹。
提交後,檔案的狀態將永久保留在 Git 的記憶之中。
一個自然而然的問題是你應該多久做一次提交。這並沒有正確的答案。使用 Ctrl + S
儲存檔案和提交到 Git 是兩個單獨的過程,因此你會一直做這兩個過程。每當你覺得自己已經做了重要的事情或打算嘗試一個可能會被幹掉的瘋狂的新想法時,你可能都會想要做次提交。
要了解提交對工作流程的影響,請從測試文件中刪除一些文字,然後在頂部和底部新增一些文字。再次提交。 這樣做幾次,直到你在 Git 標籤的底部有了一小段歷史記錄,然後單擊其中一個提交以在 Atom 中檢視它。
檢視過去的提交時,你會看到三種元素:
使用 Git 的優點之一是,按照設計它是分散式的,這意味著你可以將工作提交到本地儲存庫,並將所做的更改推播到任意數量的伺服器上進行備份。你還可以從這些伺服器中拉取更改,以便你碰巧正在使用的任何裝置始終具有最新更改。
為此,你必須在 Git 伺服器上擁有一個帳戶。有幾種免費的托管服務,其中包括 GitHub,這個公司開發了 Atom,但奇怪的是 GitHub 不是開源的;而 GitLab 是開源的。相比私有軟體,我更喜歡開源,在本範例中,我將使用 GitLab。
如果你還沒有 GitLab 帳戶,請註冊一個帳戶並開始一個新專案。專案名稱不必與 Atom 中的專案資料夾匹配,但是如果匹配,則可能更有意義。你可以將專案保留為私有,在這種情況下,只有你和任何一個你給予了明確許可權的人可以存取它,或者,如果你希望該專案可供任何網際網路上偶然發現它的人使用,則可以將其公開。
不要將 README 檔案新增到專案中。
建立專案後,它將為你提供有關如何設定儲存庫的說明。如果你決定在終端中或通過單獨的 GUI 使用 Git,這是非常有用的資訊,但是 Atom 的工作流程則有所不同。
單擊 GitLab 介面右上方的 “克隆” 按鈕。這顯示了存取 Git 儲存庫必須使用的地址。複製 “SSH” 地址(而不是 “https” 地址)。
在 Atom 中,點選專案的 .git
目錄,然後開啟 config
檔案。將下面這些設定行新增到該檔案中,調整 url
值的 seth/example.git
部分以匹配你自己獨有的地址。
[remote "origin"] url = [email protected]:seth/example.git fetch = +refs/heads/*:refs/remotes/origin/*[branch "master"] remote = origin merge = refs/heads/master
在 Git 標籤的底部,出現了一個新按鈕,標記為 “提取”。由於你的伺服器是全新的伺服器,因此沒有可供你提取的資料,因此請右鍵單擊該按鈕,然後選擇“推播”。這會將你的更改推播到你的 GitLab 帳戶,現在你的專案已備份到 Git 伺服器上。
你可以在每次提交後將更改推播到伺服器。它提供了即刻的異地備份,並且由於資料量通常很少,因此它幾乎與本地儲存一樣快。
Git 是一個複雜的系統,不僅對修訂跟蹤和備份有用。它還支援非同步共同作業並鼓勵實驗。本文介紹了一些基礎知識,但還有更多關於 Git 的文章和整本的書,以及如何使用它使你的工作更高效、更具彈性和更具活力。 從使用 Git 完成小任務開始,使用的次數越多,你會發現自己提出的問題就越多,最終你將學到的技巧越多。