Git — 為你自己學 Git

讓我們來看看 Git 是做什麼的呢?

Jeremy Xue
Jeremy Xue ‘s Blog
6 min readDec 5, 2018

--

Git logo

前言:

常常我們會聽到工程師在說一句話:

“人生不能重來,但是 Git 可以 ”

這一句看似玩笑話的東西,卻是一件真的事情 😏。常常我們會聽到周遭的開發人員或是工程師再討論 Git、Github、GitLab 等等…這些東西,那究竟 Git 的功能到底是什麼呢?它的主要用途是什麼呢?這篇我們會慢慢與大家介紹什麼是 Git,以及許多 Git 指令的操作。

此 Git 系列教學文會 Follow 「 為你自己學 Git -高見龍 」這本書的進度。

⎮ 什麼是 Git?

Git 是一種分散式的版本控制系統( Version Control System),在過去你沒有使用 Git 管理檔案的時候,可能最常用的步驟是使用「複製貼上大法」來進行文件的搬移或是備份,如果有版本的需求可能還需要複製整個專案並且記錄其版本日期,但是這些操作其實有許多的弊端,讓我們一一來看。

  1. 每次都需要複製一份檔案,導致容量越來越大
  2. 版本間的差異點在哪?修改了什麼?
  3. 檔案或內容是誰修改的?什麼時候修改的?
  4. 兩個差不多的文件是要覆蓋檔案還是需要打開比對修改?

其實還有許多的問題存在,這邊就不一一列舉出來了。但是這些總總的問題在我們啟用 Git 之後就不會存在了,那就讓我們來看看使用 Git 的優點吧。

⎮ 使用 Git 優點

  1. 免費、開源:Git 是由 Linux 核心的作者 Linus Torvalds 在 2005 年為了管理 Linux 核心程式碼,僅花了 10 天時間所開發出來的,至今已有十幾年的歷史。除了免費使用外,整個 Git 的原始碼也能在網路上取得。
  2. 速度快、檔案體積小:如果之前你是使用「複製貼上大法」來進行檔案的管理,你會發現會非常的佔空間。而大部分的版控系統都是記錄版本之間的差異而不是備份整個目錄的資料,所以整體大小不會因此而快速膨脹。
  3. 分散式系統:前面有提到 Git 是一種分散式的版控系統。它與集中式的版控系統差異在於,集中式的版控系統需要一台專用的伺服器,而所有的更新都需要與這台伺服器溝通,假如有一天這台伺服器出問題或是沒有網路連線,那就無法使用。而 Git 雖然也會有共同的伺服器,但即使在沒有伺服器或是沒有網路的環境時,依舊能夠使用 Git 來進行版控,只需要等待到伺服器恢復或是網路連線正常時同步即可。而且實際上,在使用 Git 的過程中,大多數的 Git 操作也是在本機內就能完成。

⎮ Git & Github

許多人在一開始會以為 Git 就是 Github 或是 Github 就是 Git,但並不是如此。實際上,Git 就是我們的版本控制軟體,而 Github 是一個網站,其本體是一個 Git 伺服器,但是可以透過網站上的應用程式讓使用者能夠透過其介面操作一些原本需要複雜指令的操作。

之後我們與其他人共同開發專案的時候也能夠使用 Github 來進行共同協作,在上面也能夠看見每個版本之間修改的內容、註解、誰進行修改等等…。但別忘了 Git 才是我們的本體。

⎮ Git 與其他版控系統的差異

● 分散式系統:

因為 Git 是分散式的版控系統,就算在沒有網路的情形下也能夠正常的使用 Git,只需要等待有網路的時候進行資料的同步即可。大多數的 Git 操作都能在你的電腦上就能執行,不管是遠端的伺服器或是自己的電腦,在同步之後大家都會有一份完整的檔案。

● 處理檔案的方式

Git 與其它版控系統最大的不同是在於「處理檔案」的方式。我們來看一下Git 與其它版控系統的處理方式不同的地方:

其它版本:

  • 版本 1 ~ 版本 2:這邊新增了 D、E 兩個檔案。
  • 版本 2 ~ 版本 3:這邊修改了 B、C 兩個檔案。
  • 版本 3 ~ 版本 4:這邊新增了 F、G 兩個檔案。

因為此種版控系統記錄了每個版本更動的片段內容,所以可以依據這些片段來拼湊成完整的版本。

Git:

  • 版本 1 ~ 版本 2:這邊新增了 D、E 兩個檔案。但原本的 A、B、C 是沒有被改動的,所以除了 D、E 以外的檔案,也就是 A、B、C 會指向版本 1 的 A、B、C。
  • 版本 2 ~ 版本 3:這邊修改了 B、C 兩個檔案。因為這邊只修改了 B、C 這兩個檔案,所以其中的 D、E 會兩者指向版本 2 的 D、E,而 A 會指向版本 1 的 A。
  • 版本 3 ~ 版本 4:這邊新增了 F、G 兩個檔案。所以這時我們的 A 依然指向版本 1 的 A,B、C 指向版本 3 的 B、C,而 D、E 指向版本 2 的 D、E。

有點類似於樹狀結構的概念,當這個檔案沒有被更新,他就會指向最後一次更新前的檔案,如同我們上面的 A。所以,套用這個理論,假如這個檔案被更新了,他就會指向最後一次更新的檔案,如上面的 B、C。

後記:

那麼這次的文章教學就到這邊結束了,希望透過一些簡單的科普能讓各位讀者了解 Git 的原理,了解 Git 與其他版本控制系統的差異點。在後期不管是需要多人合作或是個人開發其實都會需要 Git 來控管專案,在發生錯誤或意外時,能夠快速的恢復或是整合。

如何安裝 Git:

大家可以跟隨這篇文章的教學進行安裝 Git 的操作:

  • Window
  • MacOS
  • Linux

參考文獻:

--

--

Jeremy Xue
Jeremy Xue ‘s Blog

Hi, I’m Jeremy. [好想工作室 — iOS Developer]