← 上一章:寫在最前面 - 為你自己學 Git! 下一章:與其它版本控制系統的差異 →


什麼是 Git?為什麼要學習它?

什麼是 Git?

如果你問大部份正在使用 Git 這個工具的人「什麼是 Git」,他們大多可能會回答你「Git 是一種版本控制系統」,專業一點的可能會回答你說「Git 是一種分散式版本的版本控制系統」。「版本控制系統」的英文是「Version Control System」,但這個回答,對沒接觸過的新手來說,有講跟沒講差不多。到底什麼是「版本」?要「控制」什麼東西?什麼又是「分散式」?

不管你是不是工程師,只要你是電腦工作者,你每天的工作可能都是每天新增、編輯、修改許多的檔案。舉個例子來說,你可能是一名人資部門主管,你有一個叫做 resume 的目錄,裡面專門用來存放面試者的資料。

image

讓我們來看圖說故事。

如圖所示,隨著時間的變化,一開始這個 resume 目錄裡只有 3 個檔案,過兩天增加到 5 個。不久之後,其中的 2 個被修改了,過了三個月後又增加到 7 個,最後又刪掉了 1 個,變成 6 個。這每一個「resume 目錄的狀態變化」,不管是新增或刪除檔案,亦或是修改檔案內容,都稱之為一個「版本」,例如上圖圖例的版本 1 ~ 5。而所謂的「版本控制系統」,就是指會幫你記錄這些所有的狀態變化,並且可以像搭乘時光機一樣,隨時切換到過去某個「版本」時候的狀態。

簡單的說,Git 就像玩遊戲的時候可以儲存進度一樣。舉例來說,為了避免打頭目打輸了而損失裝備,又或是打倒頭目卻沒有掉落期望的珍貴裝備,你也許在每次要去打頭目之前之前記錄一下,在發生狀況的時候可以載入舊進度,再來挑戰一次。

為什麼要學習它?

先問大家個問題,大家平常怎麼整理或備份檔案?

以上面這張圖例來說,最傳統也是最方便的方式,便是使用「複製、貼上大法」,然後你可能就會看到像這樣的畫面:

image

雖然用肉眼就可以知道每個「版本」的用途,但,你能一下子就講出在 resume-2016-05-08 這個目錄裡的那兩個修改過的檔案改了什麼內容嗎?resume-2016-08-22resume-2016-11-28 這兩個目錄有什麼不一樣的地方嗎?又,那個 resume-bak 跟其它的目錄有什麼不同?最麻煩的是,如果這個目錄是跟其它人一起共同,不管是有心無意,要是檔案被其它同事覆蓋掉了,也完全不知道該怎麼處理。

如果你在乎這些問題的答案,那使用「版本控制系統」就是一個很不錯的選擇。透過這樣的系統,可以清楚的記錄每個檔案是誰在什麼時候加進來、什麼時候被修改或刪除。Git 就是一種版本控制系統,也是目前業界最流行的版本控制系統,沒有之一。

出社會工作,有 Git 幫你保留這些歷史紀錄跟證據,萬一出事的時候你就能知道是從什麼時候開始就有問題,以及知道該找誰負責,再也不用自己背黑鍋了!

Git 的優點

所以,到底 Git 有什麼厲害的地方,會讓這麼多人選擇它呢:

1. 免費、開源

Git 是由 Linux 核心的作者 Linus Torvalds 在 2005 年為了管理 Linux 核心程式碼,僅花了 10 天所開發出來的,至目前已有十幾年的歷史了。除了可免費使用外,整個 Git 的原始程式碼也可在網路上取得(當然 Git 的原始程式碼也是用 Git 在做版本控制的)。

2. 速度快、檔案體積小

如果你是使用前面提到的「複製、貼上大法」,這些備份的目錄會很佔空間。而其它大部份的版控系統大多是記錄每個版本之間的差異,而不是完整的備份整個目錄,所以整個目錄的大小就不會快速的增加。

而 Git 特別的設計,在於它並不是記錄版本的差異,而是記錄檔案內容的「快照」(snapshot),它可以讓 Git 在非常快速的切換版本。至於什麼是「快照」,在後面的章節會有更仔細的介紹。

3. 分散式系統

對我來說,這個可能是最大的優點了。在以往其它的版本控制系統,例如 CVS 或是 SVN 之類的集中式的版控系統(Centralize Version Control),都需要有一台專用的伺服器,所有的更新都需要跟這台伺服器溝通。也就是說,萬一這台伺服器壞了,或是沒有網路連線的環境,就沒辦法使用。

而 Git 是一款分散式的版控系統(Distributed Version Control),雖然通常也會有共同的伺服器,但即使在沒有伺服器或是沒有網路的環境,依舊可以使用 Git 來進行版控,待伺服器恢復正常運作或是在有網路的環境後再進行同步,不會受影響。而且,事實上在使用 Git 的過程中,大多的 Git 操作也都是在自己電腦本機就可以完成。。

Git 的缺點

硬是要說 Git 的缺點,大概就是易學難精吧。雖然 Git 的指令有非常多,而且有的指令有點複雜,但還好平常會用到的指令不太多,根據「80/20 法則」,大概 20% 的指令就足以應付 80% 的工作。

除了在終端機(或命令提示字元)環境的 Git 指令外,也有許多厲害的圖形介面工具,可以讓使用者不用敲打複雜的指令就可以享用 Git 強大的功能。本書也將會使用終端機指令解述概念並以圖形介面工具(例如 SourceTree)輔助說明 Git 是怎麼運作的。

常見問題

等等…我是設計師,我也可以用 Git 嗎?

基本上,Git 只關心檔案的「內容」,所以只要是檔案,其實都可以使用 Git 來管理。只是,設計師工作產出的檔案大多是 PhotoShop 的 PSD 或是 Illustractor 的 AI 檔,雖然 Git 也可以管理這些檔案,但因為這些檔案(二進位檔)不像一般文字檔可以一行一行的被檢視,所以就沒辦法那麼精準的知道什麼人在什麼時候改了哪些字。但整體來說,使用 Git 還是可以幫得上設計師的忙,至少當檔案不小心被覆蓋或刪除的時候,還可以救回舊的版本的檔案。

Git 我知道,我有看過那個 GitHub 什麼的…

這也是很多新手容易有的誤會的,以為 Git 就是 GitHub(或是反過來以為 GitHub 就是 Git), 甚至也曾看過在公司徵人的職缺上寫著「會使用 GitHub」這項技能。事實上 Git 是一款版本控制軟體,而 GitHub 是一個商業網站,GitHub 的本體是一個 Git 伺服器,但這個網站上的應用程式讓大家可以透過 Web 介面來操作一些原本需要複雜的 Git 指令才能做到的事。

本書後面也有介紹到如何使用 GitHub 與其它人共同協作,雖然 GitHub 很好用,但別忘了 Git 才是本體喔。


← 上一章:寫在最前面 - 為你自己學 Git! 下一章:與其它版本控制系統的差異 →

Comments