像資料專家一樣備份資料、回溯歷史:Git 入門
用遊戲的方式來學習,是一種有趣而高效的方式。
從剛接觸電腦時的打字練習軟體 ofollow,noindex">金山打字通 ,到程式猿寫程式碼的利器 Vim 都有小遊戲( 金山打字通遊戲 、 VIM Adventures )來幫助我們入門。當你的目標從 掌握技能 轉變為 打通遊戲 之後,學習本身也就不再痛苦。在完成每一關的過程中,都能增加我們的技能熟練度和成就感。

而 Learn Git Branching ,就是一個用小遊戲帶你入門的 Git 的網站。
為什麼要學習 Git
Git 是一種分散式的版本管理系統,作用和網盤有點類似,但是功能性和靈活性都更強大。如果你是一個計算機專業的學生或從業者,Git 的重要性不言而喻;但是對普通人而言,Git 也有 備份資料、儲存歷史記錄 等重要作用。
不怕斷電、斷網
資料無價,但很多時候我們無法保證自己的電腦不出問題。有很多時候我們會懷念上一個小時、前天或不久以前自己寫的那些文字、畫過的那些圖 1 ,如何完好的儲存資料是個永遠的話題。將工作儲存在雲端也許會增加我們內心的安全感,這也是很多人會用網盤進行備份的原因。
Git 的「本地提交」較好地解決了這個問題,它的工作方式大概是這樣: 即使沒網路,我們也可以先工作,等到連上網路後再打包上傳 。每個文件的名字都寫有主要的工作(修改)內容,而且我們還能清楚地看到文件之間地區別和改動,Git 還會自動把歷史紀錄儲存下來。對於越來越多開始從事移動辦公、遠端工作的人來說,由於網路環境不穩定,即使他不程式設計,也能從 Git 中受益。
嚴肅寫作的一個個節點
iOS 上的知名筆記工具 Drafts 會在你寫作時,每隔一分鐘幫你儲存一份當前文件的「快照」,這樣就可以方便地找回之前的某個寫作版本了。你覺得不滿意而刪除的一段文字,總可以在歷史版本中找回,很貼心。 儲存寫作的歷史版本其實就是建立寫作節點的過程。而這,也是 Git 所擅長的。

對於論文、書籍這些嚴肅的寫作內容來說,我們在寫作的時候不會頻繁的更改。深思熟慮之後,在一個節點時,我們有必要儲存一下這一階段的成果。同時,我們在對以前工作進行修改之後,也希望能便利地顯示和以往的不同 2 。
Git 最原本的使用方式
Git 是一個分散式版本控制軟體,於2005年以 GPL 釋出。它最初是為更好地管理 Linux%E5%86%85%E6%A0%B8" rel="nofollow,noindex" target="_blank">Linux核心 開發而設計。它不需要伺服器端軟體就可以運作版本控制,使得原始碼的釋出和交流極其方便 3 。
GitHub 是通過 Git 進行版本控制的原始碼託管服務 4 ,我們每個人都可以把自己的程式碼託管在上面。同時,也可以看看別人寫的程式碼,相互交流,極大方便了軟體專案的多人協作開發,也推動了開源軟體社群的壯大。GitHub 所具有的社交性讓很多人戲稱為最大的同性交友網站(男性使用者佔絕大多數)。如果你願意,可以把別人的程式碼下載到本地隨意修改,放心這不會影響他人。 總之,在 GitHub 上,大家都用同一種語言進行程式碼倉庫的操作,那就是本文的主角:Git。
如果你想開始學程式設計,一定想記錄一下自己成長的路徑。想必也一定會去 GitHub 看一看(來,這裡是 按加星數排序的程式碼倉庫 ),這時學一下 Git 不是順理成章的嗎?
怎麼學習 Git
曾經我在好奇心的驅使下去學習最淺顯易懂的 Git 教程 廖雪峰的 Git 教程 。但經過一段時間之後,我發現自己僅僅會使用 git clone
, git add
, git commit
, git push
等簡單語句。之後多次檢視 git rebase
的用法,也一直沒有理解。我們來看看最基本的幾條命令有什麼作用:
git clone 克隆:下載遠端程式碼倉庫到本地; git add 新增:新增檔案、修改後的檔案到暫存區; git commit 提交:建立本地倉庫的工作節點; git push 推送:將本地倉庫推送到遠端程式碼託管服務、網站。
就像很多次把學過的知識還給老師的經歷,這次只記住幾個簡單命令的過程依然沒讓我失望。這些命令是我平時使用最多的,所以記得最牢,而其他命令只能用到時再去查了。 沒有經過實踐的知識好像無法停留在腦子裡。
前幾天在 twitter 上閒逛,發現了一個可以互動式學習 Git 的網站 Learn Git Branching 。嘗試了一下發現效果真的很棒,有一種在玩程式設計遊戲的感覺。回想啃著玩 Human Resource Machine 的經歷,證明 不在於知識本身多艱深,只要學習曲線不陡峭,咱都能爬上去。

Learn Git Branching

網站是有中文的,而且介面很不錯,給人的第一印象很友好。

關卡選擇介面可以看到,有「主要」、「遠端」兩部分。每一部分的內容不多,覆蓋了基本的用法。每一關都是一個模擬的小專案,通過上手操作很容易獲得代入感。程式碼本身的用法在玩遊戲的過程中領會到,這種感覺很棒,讓人上癮。

教程的每一關都有引導,告訴你示範動作是怎樣的、會有什麼結果。稍作了解之後就可以自己上手探索。模仿之前教的動作,做錯了可以 reset
命令從頭開始。完成之後,可以用 show solution
命令檢視答案。這種即時反饋的學習讓過程變得有趣。

從 Git 到 GitHub
說了這麼多,簡單講一下具體的流程:
-
git clone
下載程式碼到本地。 - 建立了自己的檔案,或者進行了修改,可以用
git add .
把所有檔案加入暫存區,等待建立節點。 -
git commit -m "這一階段工作描述"
儘量細化你的節點,別做了很多工作才提交一次呀。 -
git push
把之前建立的一系列節點推送到 GitHub 釋出、儲存。 -
git pull
將 GitHub 的改動同步到本地,比如你在辦公室電腦的改動同步到家裡,或者多人協作專案中他人的改動同步到本地。
總結一下就是: 「記錄修改、本地提交、傳到雲端」 的過程。
其他學習資源
除了之前文章中提到的 廖雪峰的 Git 教程 外,還有很多學習資料。比如:
- Pro Git 第二版 。這本書被譽為 Git 學習的聖經,作者是 Scott Chacon 和 Ben Straub 。Scott Chacon 在 GitHub 工作,自稱 Git 的佈道者。你可以在網站上免費閱讀這本書,也可以下載他們提供的電子版本。
- git-recipes 。它 童仲毅 (geeeeeeeeek@github) 對很多英文資料進行翻譯、整理的集合教程。包含入門基礎、進階知識和應用範例。這些英文資料主要包括 GitHub 競爭者 Bitbucket 的 Git 教程 。
- 谷歌無人車之父 Sebastian Thrun 創辦的 優達學城(Udacity) 上面的 免費 Git 課程 。這門課程由優達學城與 GitHub 共同製作,介紹進行版本控制的基礎知識,重點講解 Git 版本控制系統以及 GitHub 協作平臺。如果你更喜歡這種上課方式,這門課程隨時都可以開始學習。
- happypeter1983 的 Git 視訊教程 。這份教程就更進階了一些。講到了一些高階命令的用法。當然還有其他學習資源。
Git 本身不難,但學會之後就是另一方天地。儘快在專案或工作中實踐吧!