跳至主要内容

3 篇文章 含有標籤「Github」

檢視所有標籤

Git Flow 介紹與 GitHub Flow 介紹入門教學筆記 | 學習筆記

· 閱讀時間約 5 分鐘
kdchang

在軟體開發中,版本控制是協作開發中至關重要的工具。Git 作為當前最受歡迎的版本控制系統,其強大的分支管理和版本控制功能,使得開發團隊能夠高效地進行協作。兩種常見的 Git 工作流是 Git Flow 和 GitHub Flow,這些工作流提供了清晰的分支管理策略,讓團隊可以更加有序地開發和部署代碼。本文將介紹 Git Flow 和 GitHub Flow 的基本概念、使用方法,以及它們之間的區別。

一、Git Flow 介紹

Git Flow 是一個基於 Git 的分支管理模型,主要由 Vincent Driessen 提出,旨在幫助開發團隊實現規範化的分支管理,並對不同開發階段的代碼進行有效的管理。Git Flow 工作流適合需要頻繁發布新版本的項目,並且開發流程中包含多個階段,如開發、測試、發佈等。其工作流程通常包含以下幾個核心分支:

1.1 主要分支

  1. master 分支master 分支是 Git Flow 中的核心分支,所有穩定的代碼都應該存在於此。每當一個新版本的代碼準備好發佈時,都會從 develop 分支合併到 master,並標記相應的版本號。這個分支通常只包含穩定的代碼,並且代表了隨時可以部署的代碼。

  2. develop 分支develop 分支用於開發中的代碼。所有的功能開發都應該從這個分支進行,並且當開發完成後,合併回 develop。這個分支是整個項目的集成區,開發人員應該從 develop 分支開始開發新功能。

1.2 輔助分支

  1. feature 分支feature 分支用於開發新的功能。每個新功能都應該從 develop 分支創建一個新的 feature 分支,並且在功能開發完成後,將該分支合併回 develop 分支。feature 分支的命名通常為 feature/<功能名稱>

  2. release 分支: 當 develop 分支上的代碼準備好進入測試階段時,會創建一個 release 分支。這個分支用來準備最終的發佈版本。在 release 分支上進行的主要工作包括 bug 修復、文檔編寫等,確保最終版本的穩定性。當測試完成並且代碼準備發佈時,release 分支會被合併到 masterdevelop 分支。

  3. hotfix 分支hotfix 分支用於修復已經發佈到 master 分支的緊急錯誤。當發佈的版本發現重大問題時,可以立即從 master 分支創建 hotfix 分支,進行修復後,將其合併回 masterdevelop 分支。

1.3 Git Flow 的流程

Git Flow 的流程大致如下:

  • 開發新功能時,從 develop 分支創建 feature 分支。
  • feature 分支開發完成後,合併回 develop 分支。
  • 當代碼達到穩定版本,創建 release 分支,進行測試和 bug 修復。
  • 測試完成後,將 release 分支合併回 masterdevelop 分支,並標註版本。
  • 若發現緊急錯誤,從 master 分支創建 hotfix 分支,進行修復並合併回 masterdevelop

二、GitHub Flow 介紹

GitHub Flow 是 GitHub 提出的另一種工作流,主要針對快速迭代和持續集成的開發模式。與 Git Flow 複雜的分支管理相比,GitHub Flow 更加簡單和輕量,適合需要快速交付和頻繁部署的團隊。GitHub Flow 主要有以下幾個步驟:

2.1 GitHub Flow 的基本流程

  1. 創建分支: 每當開始一個新功能或修復一個 bug 時,都應該從 main 分支創建一個新的分支。這個分支通常用來開發新的特性或修復某個問題。

  2. 開發與提交: 在新創建的分支上進行開發,並定期將代碼提交到遠程倉庫。這些提交應該是增量的,便於代碼審查和測試。

  3. 發送 Pull Request: 當開發完成後,將自己的分支提交為 Pull Request(PR),並請求團隊成員進行代碼審查。PR 是 GitHub Flow 中的關鍵步驟,能夠確保代碼的質量和協作。

  4. 代碼審查與測試: 團隊成員進行代碼審查,確保代碼的質量和功能正確性。GitHub Flow 推崇頻繁的測試和集成,因此在 Pull Request 發送後,通常會自動觸發 CI(持續集成)測試,檢查代碼是否有錯誤。

  5. 合併分支: 經過代碼審查和測試後,Pull Request 被批准,並將代碼合併到 main 分支。此時,新的代碼版本已經可以進行部署。

  6. 部署與發佈: GitHub Flow 的一大優勢是可以實現持續部署。當代碼合併到 main 分支後,可以立即部署到生產環境,快速交付新版本。

2.2 GitHub Flow 的特點

GitHub Flow 的流程非常簡單,沒有像 Git Flow 那樣的複雜分支結構,適合小型和中型的項目。它的優點在於快速迭代和持續交付,並且便於團隊成員協作。GitHub Flow 更加強調分支管理的簡化,並且強調測試和部署的自動化。

三、Git Flow 與 GitHub Flow 的比較

  • 分支結構: Git Flow 有多個分支(masterdevelopfeaturereleasehotfix),適用於需要穩定版本發佈的團隊。而 GitHub Flow 只有 main 分支和特性分支,適用於快速迭代和持續集成的開發模式。

  • 適用場景: Git Flow 更適合複雜的開發流程,尤其是有多個版本和發佈周期的項目。GitHub Flow 更適合快速迭代的小型或中型項目,尤其是需要頻繁部署和交付的團隊。

  • 流程複雜度: Git Flow 的流程較為繁瑣,對於小型團隊來說可能會顯得過於複雜。GitHub Flow 流程簡單,適合希望保持敏捷和快速交付的團隊。

結論

Git Flow 和 GitHub Flow 各有優缺點,適用的場景也有所不同。選擇哪一種工作流,應根據團隊的規模、項目的複雜度以及發佈頻率來決定。對於需要穩定發佈和多版本管理的項目,Git Flow 是一個更好的選擇。而對於需要快速迭代和頻繁部署的小型項目,GitHub Flow 則是一個更簡單有效的選擇。

Git 指令學習筆記 | 學習筆記

· 閱讀時間約 6 分鐘
kdchang

Git 是現代軟體開發中最常使用的分散式版本控制系統,它幫助開發者管理源代碼的版本和協作。這篇教學將從基礎開始,介紹 Git 的常用命令並提供實際範例,幫助你熟悉如何使用 Git 來進行版本控制與協作。

1. 初始化 Git 倉庫 (git init)

在專案資料夾中使用 git init 可以初始化一個新的 Git 倉庫,這樣就可以開始使用 Git 來管理專案中的檔案版本。

git init

執行後會在專案資料夾內建立一個 .git 的隱藏資料夾,這表示這個資料夾已經被 Git 所管理。

2. 查看當前狀態 (git status)

在進行版本控制時,使用 git status 可以查看專案的當前狀態。這個命令會顯示哪些檔案已經被修改、哪些檔案尚未加入版本控制。

git status

這會列出所有變更過的檔案(包括已修改、尚未追蹤的檔案等)以及當前分支的狀態。

3. 新增檔案到暫存區 (git add)

修改檔案後,必須先使用 git add 把檔案新增到暫存區,才可以進行提交。使用 git add 可以指定單一檔案或多個檔案,或者一次將所有檔案加入暫存區。

git add filename.txt

或將所有變更加入暫存區:

git add .

4. 提交變更 (git commit)

將檔案從暫存區提交到本地版本庫使用 git commit。每次提交時,需要提供一個簡短的描述,解釋這次提交的內容。

git commit -m "新增使用者登錄功能"

5. 設定 Git 使用者資訊 (git config)

在進行提交之前,必須設定 Git 的使用者名稱和電子郵件。這些資料會與每次提交關聯。

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

這會把你的名稱和郵箱寫入全域設定,未來每次提交都會使用這些設定。

6. 查看提交歷史 (git log)

使用 git log 可以查看專案的提交歷史。這會顯示每次提交的詳細信息,包括提交哈希值、作者、日期和提交訊息。

git log

如果希望更簡潔的輸出,可以使用 --oneline 參數:

git log --oneline

7. 恢復檔案 (git restore)

如果你修改了一些檔案並且還沒有提交,可以使用 git restore 恢復檔案到上次提交的狀態,撤銷變更。

git restore filename.txt

如果想撤銷暫存區的變更,可以使用:

git restore --staged filename.txt

8. 追蹤檔案變動紀錄 (git blame)

如果你想查看某個檔案每一行是誰在什麼時候修改的,可以使用 git blame

git blame filename.txt

這會顯示每一行的修改者與修改時間,有助於了解程式碼的歷史。

9. 建立分支 (git branch)

在 Git 中,分支讓你能夠並行地進行多個工作。你可以使用 git branch 查看目前所有的分支。

git branch

要創建新的分支:

git branch feature-login

10. 切換分支 (git switch)

要切換到不同的分支,可以使用 git switch。例如,切換到 feature-login 分支:

git switch feature-login

如果你要創建並切換到一個新的分支,可以加上 -c 選項:

git switch -c feature-register

11. 切換提交紀錄或分支 (git checkout)

雖然 git switch 是較新的命令,但仍然可以使用 git checkout 切換分支或還原檔案。要切換到某個分支:

git checkout feature-login

若要還原某個檔案到指定的提交:

git checkout <commit_hash> filename.txt

12. 合併分支 (git merge)

將不同分支的更改合併回主分支可以使用 git merge。首先切換到目標分支(例如 main),然後執行合併操作:

git switch main
git merge feature-login

如果有衝突,Git 會提示你解決衝突。

13. 重新整理提交歷史 (git rebase)

git rebase 用來重新整理提交歷史,將一個分支的更改重新應用到另一個分支上,使歷史更為線性。

git switch feature-login
git rebase main

這會將 feature-login 分支的變更,重新應用到 main 分支的最新提交上。

14. 重置提交 (git reset)

如果你想取消最近一次的提交,可以使用 git reset。使用 --soft 保留檔案變更,--hard 則會刪除變更:

git reset --soft HEAD^

這會將上一個提交撤回,但保留檔案變更;若使用 --hard,則會完全撤回提交及變更。

15. 查看操作紀錄 (git reflog)

git reflog 可以幫助你查看 HEAD 的操作紀錄,即便你進行了 resetcheckout 等操作。

git reflog

這個命令列出所有曾經指向 HEAD 的 commit 參考,並且可以用來恢復丟失的提交。

16. 暫存變更 (git stash)

如果你正在進行某些變更,但又需要切換到其他分支處理緊急問題,可以使用 git stash 暫時儲存未提交的變更:

git stash

這會暫時保存變更,並恢復工作目錄到最後一次提交的狀態。待你完成緊急工作後,可以使用 git stash pop 恢復變更。

17. 選擇性地應用提交 (git cherry-pick)

git cherry-pick 讓你可以選擇性地將某個提交應用到當前分支。例如,將 feature-login 分支的某個提交應用到 main 分支:

git cherry-pick <commit_hash>

這對於選擇性地將某些特定變更移動到其他分支非常有用。

18. 子模組 (git submodule)

當專案中有其他專案作為依賴時,可以使用 Git 子模組來管理。首先,將子模組加入專案:

git submodule add <repository_url> path/to/submodule

這會在專案中加入一個指向其他 Git 倉庫的子模組。在克隆專案時,記得加上 --recurse-submodules 來獲取子模組的內容。


總結

以上介紹了 Git 中一些常用的命令,這些命令幾乎涵蓋了日常開發中的大部分需求。熟練掌握 Git 讓你在開發過程中更加高效,無論是單人開發還是團隊協作,都能大大提高工作流的順暢性。如果你還有進一步的需求或疑問,隨時可以深入學習 Git 的進階技巧。

Git 入門教學筆記:從零開始學版本控制 | 學習筆記

· 閱讀時間約 4 分鐘
kdchang

為什麼要學 Git?

在軟體開發中,版本控制是一個不可或缺的工具。Git 是目前最流行的版本控制系統,它能幫助你:

  • 記錄每次修改的歷史紀錄
  • 回復到任一個過去的狀態
  • 多人協作開發不衝突
  • 管理分支進行實驗性開發

無論是獨立開發者、團隊協作,還是參與開源專案,Git 都是你的好夥伴。


一、安裝 Git

macOS

brew install git

Ubuntu / Debian

sudo apt update
sudo apt install git

Windows

請至官網下載安裝:https://git-scm.com


二、基本設定

第一次使用 Git 前,請先設定你的名稱與 Email(這會記錄在每次提交的資訊中):

git config --global user.name "你的名字"
git config --global user.email "you@example.com"

你也可以檢查目前的設定:

git config --list

三、建立本地倉庫(repository)

建立一個新資料夾並初始化 Git

mkdir my-project
cd my-project
git init

此時 .git/ 目錄會被建立,代表你已經在這個資料夾啟用了版本控制。


四、版本控制的基本流程

Git 的工作流程大致分為三個區域:

  1. 工作區(Working Directory):你實際修改的檔案
  2. 暫存區(Staging Area):準備提交的檔案
  3. 版本庫(Repository):正式提交的版本歷史

1. 查看狀態

git status

2. 將檔案加入暫存區

git add 檔名
# 或加入全部變動檔案
git add .

3. 提交版本(commit)

git commit -m "加入了首頁 HTML 結構"

五、版本紀錄與回溯

查看提交紀錄

git log

如果想要簡潔查看

git log --oneline

回到先前的狀態(例如最近一次提交)

git checkout HEAD^
# 回到上上一個版本
git checkout HEAD~2

但請注意這樣會進入「detached HEAD」狀態,只是暫時查看,不適合繼續開發。


六、分支操作(branch)

分支是 Git 強大的一環,可以讓你同時開發多個功能而互不干擾。

建立新分支

git branch feature-login

切換分支

git checkout feature-login

或合併成一行:

git checkout -b feature-login

合併分支

切回主分支(通常是 mainmaster):

git checkout main
git merge feature-login

七、遠端倉庫(Remote Repository)

若你使用 GitHub、GitLab 等服務,可以將本地專案推送到遠端:

新增遠端倉庫

git remote add origin https://github.com/yourname/yourproject.git

推送本地分支

git push -u origin main

拉取遠端最新變更

git pull origin main

八、.gitignore 檔案

.gitignore 用來指定不想被 Git 管理的檔案,例如:

node_modules/
.env
*.log
.DS_Store

建立一個 .gitignore 檔案,放進你專案根目錄,就能避免把不該版本控制的東西送到遠端倉庫。


九、常見狀況與解法

修改後不小心沒 add 就 commit 了?

可用下列方式補上:

git add 新增的檔案
git commit --amend

想撤銷修改?

還沒 add 的:

git checkout -- 檔案名

已經 add 了但還沒 commit:

git reset HEAD 檔案名

十、總結:從習慣開始,讓版本控制變簡單

熟悉 Git 的過程一開始可能會覺得繁瑣,但當你習慣了之後,它會成為你每天工作中不可或缺的工具。建議你在小專案中練習基本指令,隨手記錄每次的變更,透過良好的 commit message,讓未來的你感謝現在有好好整理的你。

如果你希望與他人協作開發,Git 更能大幅簡化流程、避免衝突。下一步,你可以學習 Pull Request(PR)、Git Flow、Rebase 等進階技巧,逐步精進你的版本控制能力。

參考文件

  1. Conventional Commits
  2. 約定式提交
  3. [Git] Conventional Commits 規範性提交
  4. git reflog - 還原大招
  5. 為你自己學 Git