iT邦幫忙

2023 iThome 鐵人賽

DAY 3
2
Modern Web

不熟 Git 嗎?好巧我也是,不如我們一起來學吧!系列 第 3

一起來學 Git 吧!(3) - Git 基本觀念與常見問題

  • 分享至 

  • xImage
  •  

前言

上一篇文章已經先了解版控系統的分類,並且知道 Git 屬於分散式版控系統。

開始使用 Git 前,筆者想先用「網購」的例子引領大家進入 Git 的版控世界。

用「網購下單」的例子來學 Git

相信大家在這個嚴峻的時代,都已經有網購的經驗。
如果我說,從購物網站「挑選商品」一直到「下單」的行為,跟 Git 的觀念有點像...你會信嗎?

欲知詳情,且聽我娓娓道來...

傳統上,如果想要購買沒有線上通路的商品,就必須到「在地商家」的消費,消費的行為會是「買了就走」,所以沒辦法紀錄「每次消費的訂單紀錄」。

所謂「在地商家」,是指那些特定地區會販賣名產的店家,他們沒有導入任何線上平台,並沒有提供協助消費者紀錄「訂單資訊」的服務。

這時,有一個名叫「基特」的「行銷平台」,他專門跟沒有網購平台的「在地商家」簽約合作。

「基特平台」能提供的服務呢,就是協助在地商家導入線上通路,替他們架設的銷售網站,讓消費者可以在線上購買商品,藉此能讓消費者追蹤自己的訂單紀錄。

消費者要做的事情,是要在「在地商家」透過「基特平台」的提供的機制建立帳號,就可以開始消費。

實際的消費流程跟我們熟悉的 蝦X、露X 一樣:挑選商品 => 加入購物車 => 拿出魔法小卡下單

而「在地商家」就算有「商品」可以販售,但他們不會有權力把想賣的「商品」加入我們的「購物車」,然後替我們「下單」。
雖然這句聽起來像廢話,不過等等聯想到 Git 觀念時會帶到

有了「基特平台」之後,我們可以記錄那些在「在地商家」的「消費訂單紀錄」,不用擔心會遺忘自己購買過什麼東西。

如果我們把這個觀念帶到 Git 的世界.....

Git 世界中的檔案狀態

來稍加整理上面的流程:

  1. 「基特平台」 可以協助 「在地商家」 導入線上通路。

  2. 要有線上通路最重要的作用,是要讓消費者 「紀錄訂單資訊」

  3. 消費者在平台 「辦好帳號」 ,就可以開始購物。

  4. 購物過程,需要將 「商品」「購物車」

  5. 確定 「購物車」 有商品, 「下單結帳」 後,我們的 「訂單資訊」 就能被記錄下來。

  6. 如果我們在同一個商家不停的 「購買商品」 ,就會累積一筆一筆的 「訂單資訊」

接著一起把上面的關鍵詞跟 Git 的世界聯想在一起:

  1. 「基特平台」 就是 「Git」

  2. 「在地商家」 是要被版控的 「專案資料夾」,或者稱之為 「工作目錄」

  3. 商家販售的 「商品」 就是工作目錄內的 「檔案」「資料」

  4. 「在地商家」 因為有 「基特平台」,可以讓消費者記錄 「訂單紀錄」
    「工作目錄」 因為有 「Git」 ,可以讓我們紀錄 「版本資訊」

  5. 「購物車頁面」 是 Git 世界的 「資料暫存區」

  6. 「訂單資訊頁面」 是 Git 世界的 「資料儲存庫」

聯想完之後,來看看 Git 的版控世界:

  1. 即使工作目錄有檔案,只要還沒告訴 Git 要版控哪些檔案,Git 就不會隨意對 「檔案」 版控。

  2. 如果要對 「工作目錄」「檔案」 進行版控,必須先把檔案放到 「暫存區」

  3. 確定 「暫存區」 的檔案資料都是我們想版控的,則可以 「提交」 暫存區的檔案,把他們放進 「儲存庫」 ,完成版控的動作。

以上,說明完畢。

如果說到這邊都看得懂,恭喜你,你已經知道如何使用 Git 版控檔案了!
沒在唬爛,在 Git 要發布一個版本,只要經歷這兩個步驟就能完成:

  1. 「檔案、資料 (商品)」 放在 「暫存區(購物車)」
  2. 再把暫存區的 「檔案、資料 (商品)」 提交到 「儲存庫(訂單資訊頁)」

這個比喻未來時不時會帶到,目的是希望新手在弄不懂 Git 時有情境能聯想。

不過在觀念建立得差不多之後,還是會回到 Git 最初的定義來解釋,並且漸漸省略各種「類比」的說明。

畢竟它只是個比喻,Git 世界之複雜,終究會出現「網購情境」解釋不通的地方。
若過於刻意拿網購情境比喻,很容易使得不好懂的觀念變得更加混淆,請讀者務必悉知這個道理。

Git 必學的項目

有了 Git 的基本概念之後,我們來看看 Git 必學的項目,這些同時也是 Git 最核心的觀念。

沒列出來的項目一時學不會就算了,未來有機會再慢慢補強,不過「至少」要能弄懂下列這些東西,才比較好說自己是個有能力操作 Git 版控程式的人。

基本指令

  1. 如何建立一個地端儲存庫 (辦帳號)? (git init)
  2. 如何把檔案放到暫存區 (加入購物車)? (git add)
  3. 如何記錄一個版本 (下單)? (git commit)
  4. 如何查看資料狀態 (查看購物車)?(git status)
  5. 如何查看版本(Commit)資訊 (查看訂單紀錄)?(git log)

分支操作

  1. 什麼是分支? (git branch)
  2. 怎麼切換分支? (git checkout)
  3. 怎麼合併分支? (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!」。
否則你會看到對方出現這個表情:
git and 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 來控管二進位檔,就見仁見智了。


上一篇
一起來學 Git 吧!(2) - 版控的類別
下一篇
一起來學 Git 吧!(4) - 安裝 Git 、 Git GUI 工具
系列文
不熟 Git 嗎?好巧我也是,不如我們一起來學吧!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言