關於Git(一)
- 版本管理系統是什麼?為什麼要用?
- 版本管理系統(Version Control System,VCS)是一種追蹤和管理項目代碼、文件和資源變更的工具。
- 工作流程上可防止每個人因使用自己的開發程式搭配不同且不相容的工具所引起的混亂。版本控制會同步處理版本,並確定變更不會與其他人的變更衝突。當小組儲存新版本的程式碼時,版本控制會保留變更的歷程記錄,以及合併來自不同人員的修改。
- 由於好的程式碼管理系統會大幅影響到開發效率,特別是當多人共同參與一個專案時。因此,工程師絕對需要版本管理系統。
- 主要的版本管理系統有兩種類型:
集中式版本控制系統(Centralized Version Control System,CVCS): 所有的版本信息都保存在一個中央伺服器上,每次使用者檢出(checkout)代碼都是從這個中央伺服器獲取最新的版本。
例子:Subversion(SVN)
分散式版本控制系統(Distributed Version Control System,DVCS): 每個使用者擁有本地的完整版本庫,包括完整的歷史記錄。使用者可以在本地進行提交(commit)、分支(branch)和合併(merge),然後將這些更改推送(push)到其他地方。
例子:Git、Mercurial
為什麼要使用版本管理系統:
- 協作: 允許多人同時在專案上工作,追蹤每個人的修改,並輕鬆地將這些修改合併在一起。
- 歷史記錄: 提供了項目的完整歷史記錄,包括每一次的修改前和更動後的程式碼、修改者、修改時間和修改原因。這有助於了解代碼的演變過程。
- 版本控制: 可以方便地切換到項目的不同版本,當新版程式出現了錯誤,版本控制系統也可以非常快速地還原至舊版本。
- 利用分支同時開發不同功能: 使用「分支 (branch)」和「合併 (merge)」的技巧,讓開發者們能同時開發多個系統和功能,但在各自工作時,彼此之間的程式碼不會互相干擾。
下圖是某個專案的版本控制軟體截圖,給大家看看分支的真實呈現,在線圖上每一個點都是一個 commit (意即一組程式碼更動),其中分支 feature/payment
是一個獨立功能,負責的工程師在這個分支上持續開發,直到功能測試完成了,才整併到 dev
分支上;而 dev
這個分支又可能代表整個開發中的產品:
- 備份和還原: 提供了對項目的備份和還原功能,減少了由於錯誤或故障而導致的損失。
- 為什麼 Git 稱作「分散式」版本管理系統?
Git 已成為版本控制的全球標準。至於被稱為「分散式」版本管理系統,這是因為 Git 的工作方式和傳統的集中式版本管理系統不同。
※ 什麼式「分散式」版本管理系統?
簡單說每個開發者的本地存儲庫都包含完整的版本歷史和代碼庫。開發者可以在本地進行提交、分支操作等,而不需要即時與中央服務器通信。這使得每個開發者都具有獨立的本地存儲庫,不受中央服務器的影響。
在Repository (資料庫)裏的項目檔案具有歷史(History)功能。歷史(History)功能可以記錄一個項目(Project)在一段時間內的變化,它能告訴你在不同時間點內, 什麼人,在什麼時候,為什麼對項目中的那個檔案做出了什麼改動。
- 每個開發者都可以擁有獨立的檔案庫,所以可以直接對自己的檔案庫進行操作。
- 可以在離線的環境(例如飛機或高鐵之上)不中斷,連續工作,也可以持續進行修改,一方面獲得版本控制系統的支持(可以管理版本、查詢修改歷史、可以回溯、也可以持續提交寫下記錄訊息、……),另一方面也不需要將自己的修改,持續送至集中的檔案庫上,造成了其他開發者必須套用這些修改,引起可能的不穩定情況。
- 重視對分支(branch)的支援,具有較好的分支及合併的能力。
- 快速操作: 由於大部分操作都在本地進行,操作速度相對較快。
- 免費
- 合併檔案速度非常快
- 儲存時間點速度非常快