# 前言
上一篇文章已經先了解版控系統的分類,並且知道 Git 屬於分散式版控系統。
開始使用 Git 前,筆者想先用「網購」的例子引領大家進入 Git 的版控世界。
# 用「網購下單」的例子來學 Git
相信大家在這個嚴峻的時代,都已經有網購的經驗。
如果我說,從購物網站「挑選商品」一直到「下單」的行為,跟 Git 的觀念有點像… 你會信嗎?
欲知詳情,且聽我娓娓道來…
傳統上,如果想要購買沒有線上通路的商品,就必須到「在地商家」的消費,消費的行為會是「買了就走」,所以沒辦法紀錄「每次消費的訂單紀錄」。
所謂「在地商家」,是指那些特定地區會販賣名產的店家,他們沒有導入任何線上平台,並沒有提供協助消費者紀錄「訂單資訊」的服務。
這時,有一個名叫「基特」的「行銷平台」,他專門跟沒有網購平台的「在地商家」簽約合作。
「基特平台」能提供的服務呢,就是協助在地商家導入線上通路,替他們架設的銷售網站,讓消費者可以在線上購買商品,藉此能讓消費者追蹤自己的訂單紀錄。
消費者要做的事情,是要在「在地商家」透過「基特平台」的提供的機制建立帳號,就可以開始消費。
實際的消費流程跟我們熟悉的 蝦 X、露 X 一樣:挑選商品 => 加入購物車 => 拿出魔法小卡下單。
而「在地商家」就算有「商品」可以販售,但他們不會有權力把想賣的「商品」加入我們的「購物車」,然後替我們「下單」。
雖然這句聽起來像廢話,不過等等聯想到 Git 觀念時會帶到
有了「基特平台」之後,我們可以記錄那些在「在地商家」的「消費訂單紀錄」,不用擔心會遺忘自己購買過什麼東西。
如果我們把這個觀念帶到 Git 的世界…
# Git 世界中的檔案狀態
來稍加整理上面的流程:
-
「基特平台」 可以協助 「在地商家」 導入線上通路。
-
要有線上通路最重要的作用,是要讓消費者 「紀錄訂單資訊」 。
-
消費者在平台 「辦好帳號」 ,就可以開始購物。
-
購物過程,需要將 「商品」 加 「購物車」 。
-
確定 「購物車」 有商品, 「下單結帳」 後,我們的 「訂單資訊」 就能被記錄下來。
-
如果我們在同一個商家不停的 「購買商品」 ,就會累積一筆一筆的 「訂單資訊」 。
接著一起把上面的關鍵詞跟 Git 的世界聯想在一起:
-
「基特平台」 就是 「Git」。
-
「在地商家」 是要被版控的 「專案資料夾」,或者稱之為 「工作目錄」。
-
商家販售的 「商品」 就是工作目錄內的 「檔案」、「資料」。
-
「在地商家」 因為有 「基特平台」,可以讓消費者記錄 「訂單紀錄」;
「工作目錄」 因為有 「Git」 ,可以讓我們紀錄 「版本資訊」。 -
「購物車頁面」 是 Git 世界的 「資料暫存區」。
-
「訂單資訊頁面」 是 Git 世界的 「資料儲存庫」。
聯想完之後,來看看 Git 的版控世界:
-
即使工作目錄有檔案,只要還沒告訴 Git 要版控哪些檔案,Git 就不會隨意對 「檔案」 版控。
-
如果要對 「工作目錄」 的 「檔案」 進行版控,必須先把檔案放到 「暫存區」 。
-
確定 「暫存區」 的檔案資料都是我們想版控的,則可以 「提交」 暫存區的檔案,把他們放進 「儲存庫」 ,完成版控的動作。
以上,說明完畢。
如果說到這邊都看得懂,恭喜你,你已經知道如何使用 Git 版控檔案了!
沒在唬爛,在 Git 要發布一個版本,只要經歷這兩個步驟就能完成:
- 把 「檔案、資料 (商品)」 放在 「暫存區 (購物車)」。
- 再把暫存區的 「檔案、資料 (商品)」 提交到 「儲存庫 (訂單資訊頁)」。
這個比喻未來時不時會帶到,目的是希望新手在弄不懂 Git 時有情境能聯想。
不過在觀念建立得差不多之後,還是會回到 Git 最初的定義來解釋,並且漸漸省略各種「類比」的說明。
畢竟它只是個比喻,Git 世界之複雜,終究會出現「網購情境」解釋不通的地方。
若過於刻意拿網購情境比喻,很容易使得不好懂的觀念變得更加混淆,請讀者務必悉知這個道理。
# Git 必學的項目
有了 Git 的基本概念之後,我們來看看 Git 必學的項目,這些同時也是 Git 最核心的觀念。
沒列出來的項目一時學不會就算了,未來有機會再慢慢補強,不過「至少」要能弄懂下列這些東西,才比較好說自己是個有能力操作 Git 版控程式的人。
# 基本指令
- 如何建立一個地端儲存庫 (辦帳號)? (git init)
- 如何把檔案放到暫存區 (加入購物車)? (git add)
- 如何記錄一個版本 (下單)? (git commit)
- 如何查看資料狀態 (查看購物車)?(git status)
- 如何查看版本 (Commit) 資訊 (查看訂單紀錄)?(git log)
# 分支操作
- 什麼是分支? (git branch)
- 怎麼切換分支? (git checkout)
- 怎麼合併分支? (git merge)
# 常見問題
# 1. 什麼是 Git GUI 工具 (GUI Tools) ?
GUI (Graphical User Interface) 的意思是「圖形使用者介面」。
我知道每個單字都看得懂,但組合起來卻都看不懂。
簡單來說,GUI 意思是一個擁有像是「按鈕」、「選單」、「視窗」之類的圖形畫面,作為讓使用者跟電腦互動的用途,它存在的目的是為了讓人們不用再透過終端機下指令,就能跟電腦互動。
「Git GUI 工具」 就是讓我們不用執行 Git 指令,就能版控的工具。
即便是 Git 的新手,應該都有個概念是:使用 Git 版控好像就是要學會怎麼在那個黑黑的畫面打指令來操作的樣子。
事實上除了使用指令之外,我們也可以在 Git 官網 找到許多推薦的軟體讓我們用來操作 Git ,一般我們都叫這些軟體為 「Git GUI 工具」,或是簡稱 「Git GUI」,甚至就直接稱作 「GUI」
不過如果你跟筆者一樣都直接講 「GUI」,要注意的是這個詞 不只 會使用在 Git。在電腦科學領域中,只要符合上面 GUI 定義的東西,都能叫做「GUI」,只是此系列文都是在講 Git ,所以提到 「GUI」 一定是指「Git 的 GUI 工具」,請大家千萬注意不要誤用名詞。
後續會介紹到的 GUI 工具是 「Fork」,安裝的方式將會在下一篇文章一併介紹。
# 2. 我需要學會 「Git 指令」 外加 「Git GUI 工具」才叫做會 Git 嗎?
不用。
GUI 的出現就是為了讓我們不用下指令, GUI 在做的事情跟 Git 指令完全一樣。
讀者可以兩種操作方式都學,也可以挑一個學即可。
不過因為還是有「指令才能做到,但 GUI 做不到」的功能,所以也建議 GUI 派使用者稍加了解「怎麼開終端機下指令」,需要的時候才不會手忙腳亂。
而筆者已經不是小孩子了,我全都會用到。
雖然我是指令派的使用者,絕大多數的情況都是下指令來操作 Git ,不過如果需要看線圖或是執行一些簡單的操作,透過 GUI 來執行還是會比指令來得方便。
# 3. Git 與 GitHub 是不是一樣的東西?
不是。
Git 是一套版控工具, GitHub 是一個 「遠端儲存庫」 。
其他還有像是 GitLab 之類以「Git」來命名的東西,也是 「遠端儲存庫」 的一種。
請大家千萬不要認為這兩個是一樣的東西!!
當聽到有人問自己:「有沒有用過 Git?」 時,千萬不要回說:「哦有啊!我有在用 GitHub!」。
否則你會看到對方出現這個表情:
# 4. 我學會操作 GitHub,代表我會 Git 了嗎?
同上題,不是。
GitHub 只是 Git 遠端儲存庫的其中一種。
雖然 GitHub 有畫面能操作很直覺,而且看起來也能做到「版控」的動作,不過 Git 與 GitHub 在版控流程所負責的工作還是不太一樣,兩者無法相提並論。
此外,市面上的遠端儲存庫也不只有 GitHub,其他常見的還有 GitLab 、 TFS,甚至會有公司建立自家的遠端儲存庫 (Git Server)。
如果只會操作 GitHub,你還是不知道怎麼操作 Git 來把地端與遠端儲存庫作連結。
正確的學習程序,應該是先學會 Git 基本觀念之後,再透過 GitHub 來輔助學習:如何建立地端與遠端儲存庫的連線。
# 5. 我已經知道 Git 是離線軟體,那我怎麼跟他人一起開發同一份程式?
建立「遠端儲存庫」,讓所有人在上頭共享程式。
遠端儲存庫的例子有 GitHub 、 GitLab 、 TFS,甚至公司自己架設的 Git Server。
把版控資料同步遠端儲存庫,是 Git 世界與他人共享程式的方式。
# 6. Git 是不是只能進行程式碼版控?
不是。
雖說 Git 用於版控「文字檔」的能力最為完整,不過我們也可以用 Git 版控非文字檔,例如圖檔、PDF 檔、Word 檔。
以程式開發人員來說,圖片也算是很常被記錄在進 Git 的檔案類別。
但畢竟 Git 確實不擅長處理非文字檔案,要不要用 Git 來控管二進位檔,就見仁見智了。