淺談版本控制示意圖原理_作法_悲觀鎖定VS樂觀鎖定VS分散式版本_傳統Delta儲存.vs.DAG儲存
Version Control System (VCS)
當中有些專業術語時常看到
Respository(儲存庫)
主要用來保存程式代碼
方便散佈程式給Team 促進更有效率的團隊開發
可以記錄誰改變、在何時改變、因捨麼原因等等
主要放: 原始碼、範例設計檔、文件檔 ....etc
不須放: 暫存檔案、log檔案、build files等編譯後之產物
Branch(分支)
可因不同情境分開進行開發
Tag(標籤)
重要里程碑 , 便於日後參考
版本控制一般若沒有接觸過任何 類似工具的初心者
往往會發現 挖
我要做一個老師的作業 或作品
要一直不停在本機端 複製檔案 再去修改接下來後續功能
Local VCS
複製 新增一堆檔案 取名 v1...v2.....v3.....v3.1......v.3.2.....
這樣不僅會消耗空間還只限定於自己的個人電腦端上
無法達到 協同處理的工作模式
因此 , 版本控制的重要性就被人們重視了
在早期
版本控制
是屬於 Lock型態
【1】悲觀鎖定(Pessimistic Locking)_Lock型
當我是某一個職員要進行專案功能修改的時候
我就從中央版本資料庫把其中一個檔案checkout出來
同時為了避免其他同事修改這個檔案
我也會把它lock起來(只有自己可以修改)
當我修改好 再把這個檔案 commit 上去 其他同事才能繼續修改
可避免檔案衝突
git checkout 分支名稱
例如 : git checkout master
回至分之末端
當中有些專業術語時常看到
Respository(儲存庫)
主要用來保存程式代碼
方便散佈程式給Team 促進更有效率的團隊開發
可以記錄誰改變、在何時改變、因捨麼原因等等
主要放: 原始碼、範例設計檔、文件檔 ....etc
不須放: 暫存檔案、log檔案、build files等編譯後之產物
Branch(分支)
可因不同情境分開進行開發
Tag(標籤)
重要里程碑 , 便於日後參考
版本控制一般若沒有接觸過任何 類似工具的初心者
往往會發現 挖
我要做一個老師的作業 或作品
要一直不停在本機端 複製檔案 再去修改接下來後續功能
Local VCS
本示意圖 屬於 二次創作中的拼貼
修改來自於 Line貼圖: 替代役的日常 如有違反著作權請告知(學習分享用途)
複製 新增一堆檔案 取名 v1...v2.....v3.....v3.1......v.3.2.....
這樣不僅會消耗空間還只限定於自己的個人電腦端上
無法達到 協同處理的工作模式
因此 , 版本控制的重要性就被人們重視了
在早期
版本控制
是屬於 Lock型態
【1】悲觀鎖定(Pessimistic Locking)_Lock型
當我是某一個職員要進行專案功能修改的時候
我就從中央版本資料庫把其中一個檔案checkout出來
同時為了避免其他同事修改這個檔案
我也會把它lock起來(只有自己可以修改)
當我修改好 再把這個檔案 commit 上去 其他同事才能繼續修改
可避免檔案衝突
本示意圖 屬於 二次創作中的拼貼
修改來自於 Line貼圖: 替代役的日常 如有違反著作權請告知(學習分享用途)
優點: 可避免衝突
缺點: 不方便團體開發,萬一有人寫很久就會要排隊等了.......或是忘記unlock
演變至後期
程式設計師 和 資訊工程師們
就開始發展出了一套
【2】樂觀鎖定Optimistic Locking)_Merge型
現今多數使用的是此模式
別於 悲觀鎖定 事前鎖定
樂觀鎖定 是 事後若遇到衝突才在commit回中央版本資料庫的時候才告知你
我們於上述兩個不管悲觀型(Lock)、樂觀型(Merge)的版本控制模式
之中其實都會遇到一個致命缺點
1.做捨麼都必須先跟 server端(中央版本資料庫) 連線
十分慢
2.Single point of failure
若 server掛了 , 網路壞了 那就無法看到版本歷史紀錄
演變至今
就出現了
【3】Distributed VCS _分散式版本控制系統
Git
近年來趨勢以此型態為主流
何謂 分散式版本控制系統
在你遠端Server有一個完整的版本資料庫
在你本地端也有一個完整版本資料庫(有人稱為stage)
當你修改檔案一樣會先checkout 改玩再commit出去到stage
但若要真正分享給同事的話
還必須push到遠端server
之後 同事再從遠端pull回自己本地端
別於過去版本控制多了一層「遠端」
這樣可以更加靈活工作流程
最明顯好處就是
Git分散式系統中
即使沒有網路照樣可以commit 和 看歷史紀錄
也不用擔心 server備份問題
因為每個人都有完整的Repository(儲存庫)
Git 開放原碼分散式版本管理系統(DVCS)
發明者是 Linux 創建人 Linus Torvalds
目的 管理 Linux Kernel 原始碼
2005 4月 開始開發
2005 6月開始進行管理
2005 12月 釋出 1.0版
有很多知名公司團隊都在用 Git
像是 Git 本身、Linux Kernel
Facebook、IBM、Twitter、Microsoft、Adobe等等
Git很快 又 節省空間
開分支快 效能好 節省資源
「Delta儲存方式」 VS 「DAG儲存方式」
在 Git 之前的版本控制系統
是採用所謂的 「Delta儲存方式」
紀錄每次檔案變更、開分之還需要建立副本
在 Git中儲存方式就改為 DAG(Directed acylic graph) 有向循環圖
利用 DAG 紀錄metadata建構出snapshots
相同內容只會有一份紀錄
Git 也算的上是一種 mini filesystem
安裝指令套餐(不同系統間)
Mac
brew install git
Ubuntu / Debian
apt-get install git
Fedora/CentOS
yum install git-core
=================================================================
常用幾個基本指令套餐組合
Step1. 先讓 git 認識你這個開發者
你的名字
git config --global user.name "your name"
你的信箱郵件
git config --global user.email "test@gmail.com"
Step2. 初始化
於目前所在目錄中,啟動Git版本控制機制
git init
Step3.寫了一陣子程式後
準備將要提交(commit)的檔案加進stage
此步驟可以讓你自行選擇確定要提交的東西
不需要的可以閃邊
git add file1 file2....
Step4.查看目前狀態
哪些檔案位於 Stage
哪些檔案未被追蹤
哪些檔案被修改過
git status
Step5. 存檔
記得寫目前存檔關卡的資訊(例如這是進度到哪的附註...)
git commit -m "message"
Step6. 比較差異、看log資訊、捨棄未被commit的修改
git diff
跟上次commit的作比對
git log
(PS: 每一個commit都會有一個唯一的亂數編號)
git reset --hard
捨棄所有還未被commit出去的修改
git checkout commit標號
重返至某個commit時狀態
例如 : git checkout master
回至分之末端
留言
張貼留言