這是一張有關標題為 什麼是 Git 與版本控制? 的圖片

什麼是 Git 與版本控制?

Git 的基本介紹與說明,並說明現代程式碼管理的方式。

前言

本系列 Git 教學將著重在 VS Code 與 Git 的操作、整合與專案管理。

什麼是版本控制?

版本控制是隨著時間用來追蹤文件的差異與變化,並提供儲存與回朔到特定版本的功能。

像是 Google Sheet、微軟 Microsoft 365 (Word、PowerPoint、Excel) 都提供歷史版本檔案的回朔:

Google 文件 - 查看版本紀錄 Word (Microsoft 365) - 版本歷程紀錄

藉由軟體所提供的歷史紀錄,我們可以不需要將檔案複製進行備份,形成多個檔案的結果。

版本控制如果是文字檔案,還可以比對檔案之間的差異。像是說明 test.txt 從 A 版本變為 B 版本新增或刪除了哪些東西,這就是版本控制的目的。

而要管理像是文字檔案(txt, c, py, js, md 等…),繪圖檔案(psd, ai)、模擬檔案等文件。

可以透過常見主流且為業界標準的軟體為:Git 與 Subversion(SVN)。

兩者皆為開源、免費。可以在私人電腦或是公司電腦上進行安裝並管理文件、專案。

什麼是 Git?

Git 是一個分布式版本控制系统(version control system,VCM)。

每個成員都可以將完整的程式碼從遠端倉庫(remote repo(sitory))複製(clone)到本地端(local repo)。

當多個不同成員進行 clone 後,每個成員的本地電腦端都會擁有自己的一個副本進行管理。

若成員 A 開始修改與編輯後,可再進行推送(push)到遠端倉庫。

成員 B 由於當時 clone 時,還沒有 A 的修改,所以可能會發生同一個檔案上的衝突(conflict)。

此時 B 要與 A 進行溝通,進行差異上的合併(merge)、或是進行重置基準(rebase)等操作。

以 AdGuardHome 開源軟體為例,可以看到開發者會針對每個新版本會開啟新的分支(branch)進行管理,並且由多個不同使用者進行提交程式碼。

其中在提交程式碼並修復新的 bug 可能會開新的分支,最終由主開發人員評估後,進行 merge 的操作。

開源軟體 AdGuardHome 的 GitGraph

什麼是遠端倉庫?

我們在本地端初始化一個新的 repo 後,可以將本地端的內容 push 到遠端倉庫。

遠端倉庫的主要功能是儲存程式碼,為位於網路上的伺服器。

並可能提供一些額外的功能像是:

  1. 程式碼審查(code review)
  2. 問題追蹤(issue tracking)
  3. 持續整合(continuous integration,CI)
  4. 持續交付(continuous delivery,CD)
  5. 建立 wiki 文件說明
  6. 項目管理
  7. 權限管理
  8. 可視化進度(visualize progress)
  9. 等…

目前主流的遠端倉庫主要有:

  • GitHub(微軟):

    1. 提供了程式碼審查、問題追蹤、持續整合等功能。
    2. 在個人開發者和企業中都廣受歡迎。
    3. 提供免費和付費服務計劃,用戶可以根據需要選擇不同的計劃。
  • GitLab:

    1. 可以在公司內部架設,也有雲端服務可用。
    2. 強調 DevOps 和 CI/CD 整合,提供了完整的 DevOps 平台。
    3. 提供社區版(免費)和企業版(付費)等不同版本。
  • Azure DevOps(微軟):

    1. 不僅是程式碼管理工具,還是一個完整的 DevOps 平台,包括程式碼管理、CI/CD、專案管理等功能。
    2. 深度整合了 Azure 雲端服務。
    3. 提供免費和付費計劃,企業和團隊可以選擇適合自己需求的方案。

上述平台,會根據使用人數、是否付費,提供不同層級的服務。

在個人開發者中,使用最多的遠端倉庫就是 GitHub 了。

中大型企業往往不想將程式碼放到 GitHub,會考慮自己架設 GitLab 放在公司內部的伺服器上。

而某些外國企業在合作上,甚至是需要執行 DevOps 進行程式碼追蹤,會另外要求使用 Azure DevOps 進行程式碼管理與敏捷開發。

開始使用 Git

選擇指令介面還是圖形界面?

在開始使用 Git,首先要有好的 IDE 進行操作。

傳統上的 IDE 就是 cmd + vim/nano 等文字編輯器。藉由命令提示字元、一行一行的輸入指令。

git merge 時遇到檔案衝突,必須在指令模式下找到衝突的程式碼、編輯、存檔、git add後,最終沒衝突再 git commit。

相比之下,圖形界面(GUI)則簡化了這些複雜的指令輸入過程。透過點擊操作,可以輕鬆解決許多問題。

對我來說,大部分的操作都是透過 GUI 進行,因為它更直觀且易於操作。不過有些特定的操作、或是制式化的操作可能使用指令模式來處理會更快。

我建議熟悉兩種操作方式,就可以更靈活地使用 Git。

所以電腦請先安裝好:

  1. Git
  2. VS Code
  3. Windows Terminal(選用)
  4. PowerShell(選用)
  5. Clink(選用)

詳細的安裝方式可以參考 Awesome Windows - 必備生產力軟體安裝與說明 進行安裝。

我最初開始學 Git 時,使用的遠端倉庫為 GitHub。

Github 提供了 GitHub Desktop,這套軟體少了蠻多重要的功能,因此不建議使用。

還有像是 SourceTreeTortoiseGit 等其他 GUI,雖然是 Git 官方所推薦,但相較於 VS Code 的擴充性還是差了一大截所以也不推薦。

註冊 GitHub

在 GitHub 上進行註冊,取得一個免費放程式碼的空間。

  • 無限制的公共/私人存儲庫
  • 自動安全和版本更新
  • 每月 2,000 分鐘的 CI/CD
  • 公共存儲庫免費
  • 500 MB的套件存儲
  • 公共存儲庫免費
  • 問題和專案
  • 社區支援 GitHub Copilot 訪問

無論是架設技術部落格或是存放個人的程式碼都綽綽有餘。

至於註冊方法可以參照官方一步一步進行操作。整體來說不會很困難。

使用 Git 的迷思

  1. 害怕使用 Git

    萬物皆可 Git,只要檔案不要超過 100 MB(經驗法則)。除了程式碼外,也可以用來追蹤像是 .md 或是圖片檔案。

  2. Git 太複雜,難以入門

    在網路上,常常會將 Git 與 SVN 進行比較,並聲稱 Git 很複雜。

    實際上,初次接觸 Git 時,你只需要記住基本操作: git commit,並在提交時附上簡單的說明。隨著時間的推移,你會逐漸熟悉其他操作,如合併(merge)或重整(rebase)分支等。

    如果擔心操作出錯,可以創建一個新的分支(例如 TEST)來進行操作。當你確定操作無誤後,可以刪除原始分支(如 main),並將測試分支(TEST)重新改名為為主分支(main)。這樣做可以大大減少犯錯的可能性。如果 TEST 分支在 merge 卡住、出現問題時,可以輕鬆地刪除它。

需要購買相關書籍嗎?

不需要! (但是,如果想看紙本書籍也不是不行。)

現在網路資訊那麼發達,指令忘了網路上查一查就好了。

更多免費的資源,官方也早已撰寫好電子書籍 - Pro Git book

如果真的有問題,問問 ChatGPT 可能都還比較快。

也因此看書學習 Git 是不需要的。

如果要學習 Git,一些推薦的相關資源可以參考:

  1. Pro Git book
  2. Git Branching
  3. Git Tutorial (w3schools)

結論

下一章節會說明如何使用 VS Code 進行 Git 與專案整合。

參考文獻

  1. Git - 關於版本控制
  2. 版本控制 - 維基百科
  3. 什麼是版本控制? | Microsoft Learn
  4. 什麼是 Git? | Microsoft Learn
主題 Stack 由 Jimmy 設計