版本控制系統是現代軟體開發的根本,Git 作為分散式版本控制系統的代表,已成為開發者的必備技能。本文從 Git 的基本命令開始,循序漸進地介紹了初始化倉函式庫、提交修改、分支管理、遠端協作等核心操作,並搭配實際案例說明,幫助讀者快速上手。接著,文章深入 GitLab 這個整合式 DevOps 平台,闡述其核心元件,如專案、群組、議題、分支、合併請求等,以及如何利用 GitLab Flow 建立高效的開發流程。文章也涵蓋了 GitLab 的進階功能,如 Rebase、快進合併、標籤等,以及如何選擇合適的 GitLab 版本和佈署方式。最後,文章強調了持續學習和實踐的重要性,並提供了一些學習資源,鼓勵讀者進一步探索 Git 和 GitLab 的世界。
版本控制與GitLab基礎:從基礎命令到高效開發流程
從基本Git命令開始
玄貓將先介紹Git的基本概念與命令,這些是每位開發者必須掌握的技能。透過這些命令,你將能夠管理你的程式碼版本,確保團隊合作時能夠有效地協作。
初始化與克隆倉函式庫
首先,你需要了解如何建立一個新的Git儲存函式庫或是從現有的倉函式庫中複製(clone)一份來開始工作。
# 初始化一個新的Git儲存函式庫
git init
# 從遠端倉函式庫複製一份到本地
git clone https://github.com/user/repo.git
內容解密:
git init:這個命令會在當前目錄下初始化一個新的Git儲存函式庫,生成一個隱藏的.git資料夾來存放所有的版本控制資訊。git clone:這個命令會從遠端Git儲存函式庫複製一份到本地,讓你可以在本地進行修改和提交。
修改與提交檔案
當你完成了一些修改後,可以使用以下命令來新增並提交這些修改。
# 新增所有已修改的檔案到暫存區
git add .
# 提交暫存區的檔案到本地倉函式庫
git commit -m "描述這次提交的變更內容"
內容解密:
git add .:這個命令會將當前目錄下所有已修改過的檔案新增到暫存區。你也可以使用git add <file>來新增特設定檔案。git commit -m "描述":這個命令會將暫存區中的所有變更提交到本地倉函式庫,並附上一個描述性的訊息。
分支管理
分支是Git中非常重要的一個概念,它允許你在不同的功能或實驗中工作而不會影響主分支。
# 建立並切換到新分支
git checkout -b feature-branch
# 列出所有分支
git branch
# 刪除分支
git branch -d branch-name
內容解密:
git checkout -b feature-branch:這個命令會建立一個名為feature-branch的新分支並切換到該分支。git branch:這個命令會列出所有在本地的分支。git branch -d branch-name:這個命令會刪除名為branch-name的分支。
分支合併與衝突解決
當你完成了某個功能或修復了某個bug後,可以將你的分支合併回主分支。
# 切換到主分支
git checkout main
# 合併feature-branch到主分支
git merge feature-branch
# 解決合併衝突後再次提交
git add .
git commit -m "解決合併衝突"
內容解密:
git checkout main:這個命令會將你切換回主分支。git merge feature-branch:這個命令會將feature-branch合併到當前分支(即主分支)。- 在合併過程中可能會出現衝突,需要手動解決後再進行提交。
推播與提取變更
當你在本地完成了一些變更後,可以使用以下命令將變更推播到遠端倉函式庫或從遠端提取最新的變更。
# 推播本地變更到遠端倉函式庫
git push origin main
# 提取遠端倉函式庫最新變更到本地
git pull origin main
內容解密:
git push origin main:這個命令會將當前分支(即主分支)上的變更推播到遠端倉函式庫。git pull origin main:這個命令會將遠端倉函式庫中的最新變更提取到本地並自動合併。
Git高階功能與資源
雖然以上是一些基本的Git命令和操作,但Git還有很多高階功能和選項可以進一步探索。例如:
- Rebase:重寫提交歷史以保持清潔的commit記錄。
- 快進合併:簡化合併過程並保持線性提交歷史。
- 標籤:為特定commit打標籤以便於後續參考。
玄貓建議以下幾個資源來進一步學習和參考:
- GitLab Cheat Sheet:提供常用Git命令和概念的快速參考。
- Ry’s Git Tutorial:適合初學者或需要重新複習的人。
- Pro Git:詳細且深入的Git參考書籍,適合查詢特定指令和選項。
- Dangit Git!?!:幫助你從常見Git問題中解脫出來。
GitLab基礎元件與開發流程
接下來,玄貓將介紹GitLab及其核心元件。GitLab是一款強大的開發工具,涵蓋了軟體開發生命週期中的各個階段,從計劃、建立、測試、佈署到監控。它還支援多種工作流程和協作方式。
GitLab元件概述
GitLab由多個核心元件構成,包括:
- 專案(Projects):用於管理特定軟體開發專案。
- 群組(Groups):用於組織多個相關專案。
- 問題(Issues):用於跟蹤任務、Bug和需求。
- 分支(Branches):用於開發不同功能或實驗。
- Merge Requests:用於提出和審核程式碼變更。
建立與管理專案
在GitLab中,專案是基本單位。每個專案都有自己的程式碼倉函式庫、問題跟蹤系統和CI/CD組態。
graph TD;
A[建立專案] --> B[新增成員];
B --> C[組態CI/CD];
C --> D[推播程式碼];
D --> E[觸發CI/CD管道];
E --> F[佈署應用];
此圖示展示了在GitLab中建立和管理專案的一些基本步驟。首先,建立一個新專案;接著新增團隊成員;組態CI/CD管道;推播程式碼觸發自動化測試和佈署;最後佈署應用程式。
高效開發流程與最佳實踐
玄貓強烈建議使用GitLab Flow作為最佳實踐工具流程。它結合了多種開發方法和工具,幫助團隊高效地開發、測試和佈署應用程式。具體步驟如下:
- 計劃與需求收集:使用問題跟蹤系統記錄需求和Bug。
- 開發與測試:在不同的分支上進行功能開發和測試。
- 程式碼審核與合併:透過Merge Requests進行程式碼審核並合併變更。
- 自動化佈署:使用CI/CD管道自動化測試和佈署過程。
透過以上介紹,玄貓希望你能夠掌握基本的Git操作以及如何使用GitLab來提升開發效率。無論是初學者還是有經驗的開發者,持續學習和實踐都是關鍵。
理解 GitLab 元件
若要最大化本章節的效益,建議您能夠登入到 GitLab 的例項中進行操作。這個帳號可以是 gitlab.com 上的 SaaS 帳號,也可以是公司自行管理的例項。甚至,您也可以在家中或雲端虛擬機器上自行架設 GitLab,使用像是 AWS EC2、Google Cloud Platform 或 Microsoft Azure 等服務。
自行架設 GitLab 並不如聽起來那麼困難,因為它的硬體需求相對較低——甚至可以在 Raspberry Pi 上執行!此外,GitLab 提供了各種「Omnibus」Linux 檔案包,包含完整的 GitLab 例項所需的所有元件。有關更多資訊,請參考 GitLab 的安裝檔案:https://about.gitlab.com/install。
如果您希望由他人負責安裝、管理及升級工作,可以前往 https://gitlab.com 註冊免費的 SaaS 平台帳號。
儘管 SaaS 和自行管理的 GitLab 有少許功能差異,但這些差異微乎其微,本文不會詳細討論。基本上,SaaS 和自行管理的 GitLab 功能集是相同的。
截至 2023 年初,GitLab 提供三種產品層級:Free、Premium 和 Ultimate。Free 層級是開源且免費給所有人使用,但功能相對有限。Premium 層級需要付費許可證,但提供一些額外功能。Ultimate 層級則比 Premium 更昂貴,但解鎖了完整的 GitLab 功能集。這些層級適用於 SaaS 和自行管理的安裝。
本文將討論一些 Free 層級的功能、一些僅在 Premium 和 Ultimate 層級可用的功能以及一些僅在 Ultimate 層級解鎖的功能。如果您預算有限,不要擔心。即使在較低層級,GitLab 也有很多功能可以改善軟體開發者的工作流程。許多人發現 Free 層級已經足夠滿足他們的需求,特別是如果他們主要使用 GitLab 做個人興趣專案。
強調「為什麼」而非「如何」
在開始之前,請注意以下幾點。通常,本文不會逐步指導您如何在 GitLab GUI 中執行各種操作。
首先,這些操作的說明已經在 GitLab 的官方檔案中詳細描述,而且非常清晰且全面。
其次,由於 GitLab 在快速發展中,其 GUI 常常變動。這些變動通常不是劇烈且破壞工作流程的變動,但足以使截圖或逐步指令過時。這意味著任何具體說明可能隨著時間變得混亂或難以遵循,甚至可能導致資料遺失。為了避免這個問題,我們將主要專注於為什麼要使用不同的 GitLab 功能。儘管我們會告訴您如何使用這些功能,但通常不會為每個組態選項或工作流程提供詳細說明。
介紹 GitLab 平台
GitLab 是什麼?
GitLab 是一個由公司名為 GitLab 生產的一款產品:一個名為 GitLab 的網頁應用程式。
從技術角度來看,GitLab 網頁應用程式是一組複雜的工具、資料函式庫、佇列和貼合程式碼組成的一部分;但在使用者眼中,它只是一個單一、根據網頁的軟體開發工具。
「GitLab」的不同意涵
在本文中,「GitLab」一詞通常指的是工具而非公司(除非我們明確指出)。如第 chapter 一章所述,「GitLab」採用單一工具模式比任何專注工具組合更容易安裝、管理和升級。它只需要每位使用者一組憑證即可。它提供一致性GUI來處理所有功能。它整合了所有軟體開發生命週期工具,使資料可以從一個功能流向下一個而不會丟失或失真。它提供了一個單一位置來瞭解軟體狀態,當您規劃、建構、測試、保護和佈署軟體時。
GitLab 解決了什麼問題?
GitLab 的目的(即它試圖解決的問題)隨著時間推移而變化並擴充套件。它於 2011 年推出時有一個狹隘的焦點:希望讓 Git 更容易使用且更強大。
那時候它只是一個根據網頁介面封裝 Git 的 GUI 工具以及專案黃金版本倉函式庫放置位置的一部分。
自那以後,「GitLab」擴充套件了其範圍。「GitLab」現在不僅針對 Git 本身,還針對整個軟體開發生命週期。
理解「階段」
要了解其任務如何成長,「Gitlab」首先需要理解軟體開發生命週期中“階段”的概念。「Gitlab」認為有十個階段:
- Manage:建立稽核和合規報告及限制資源存取
- Plan:專案管理和計劃
- Create:程式碼編寫和版本控制
- Verify:測試及品質保證
- Package:構建和套件化
- Release:佈署和釋出
- Configure:基礎設施組態
- Monitor:監控和維護
- Secure:安全性和風險管理
此圖示
flowchart TD
A[Manage] --> B[Plan]
B --> C[Create]
C --> D[Verify]
D --> E[Package]
E --> F[Release]
F --> G[Configure]
G --> H[Monitor]
H --> I[Secure]
小段落標題
此圖示展示了軟體開發生命週期中各階段之間的關係。「Manage」階段涉及建立稽核和合規報告及限制資源存取。「Plan」階段則包括專案管理和計劃。「Create」階段是程式碼編寫和版本控制。「Verify」階段則涉及測試及品質保證。「Package」階段則是構建和套件化。「Release」階段則涉及佈署和釋出。「Configure」階段包括基礎設施組態。「Monitor」階段則涉及監控和維護。「Secure」階段則是安全性和風險管理。
Manage:建立稽核和合規報告及限制資源存取
「Manage」階段旨在確保系統符合相關法規要求並具有適當的稽核跡跡。「Manage」透過建立稽核報告來檢查系統狀態並記錄重要事件。「Manage」還可以限制對敏感資源的存取許可權,「Manage」確保只有授權人員才能檢視或修改特定資料。
內容解密:
flowchart TD
A[資源存取控制] --> B[稽核日誌]
B --> C[合規報告]
小段落標題
此圖示展示了「Manage」階段中的關鍵元素,「Manage」主要關注資源存取控制、「Manage」與稽核日誌、「Manage」還負責生成合規報告。「Manage」透過這些機制確保系統符合法規要求並具有適當的稽核跡跡,「Manage」提升系統安全性與可信度。 此圖示展示了「Manage」階段中的關鍵元素,「Manage」主要關注資源存取控制、「Manage」與稽核日誌,「Manage」還負責生成合規報告。「Manage」透過這些機制確保系統符合法規要求並具有適當的稽核跡跡,「Manage」提升系統安全性與可信度。
Plan:專案管理與計畫
「Plan」階段集中於專案管理與企劃工作。「Plan」,透過定義專案目標、制定時程表並分配任務來確保團隊有效協作。「Plan」,還包括風險評估與緩解策略,「Plan」,幫助團隊預見潛在問題並制定相應應對措施。
內容解密:
flowchart TD
A[專案目標] --> B[時間表]
B --> C[任務分配]
C --> D[風險評估]
小段落標題
此圖示展示了「Plan」階段中的主要元素,「Plan」,這些元素包括專案目標定義、「Plan」,時間表製作、「Plan」,任務分配以及風險評估。「Plan」,透過這些活動,「Plan」,團隊能夠高效協作並準備好面對潛在挑戰。 此圖示展示了「Plan」(企劃)階段中的主要元素,「Plan」,這些元素包括專案目標定義、「Plan」,時間表製作、「Plan」,任務分配以及風險評估。「Plan」,透過這些活動,「Plan」,團隊能夠高效協作並準備好面對潛在挑戰。 此圖示展示了「Plan」(企劃)階段中的主要元素,「Plan」,這些元素包括專案目標定義、「Plan」、時間表製作、「Plan」、「任務分配以及風險評估。」