在 git 里面做版本管理,真的像是在打游戲似的,有種時空穿梭的感覺。請注意,不僅僅是只有時間上面的穿梭,還順帶著可以穿越空間維度,暢游代碼版本的平行宇宙。
為了讓大家更好的了解 git 平行宇宙,先來張略微震撼的示意圖。
先解釋一下這張圖。
宇宙在爆炸初期分裂了 N 個平行空間。而我們生活的宇宙屬于當(dāng)前空間的一份子。隨著時間的推移,我們的宇宙從第一個元素誕生慢慢衍生到了現(xiàn)在的的科技社會。這個過程就類似于我們一個型號的代碼,在不斷的迭代,增加功能。多個平行空間是獨立的,它們擁有各自不同的發(fā)展命運,但是它們都是基于一個起點。舉個和咱們程序開發(fā)相關(guān)的例子。
如圖所示,我們公司開發(fā)了一款萬能遙控器,一經(jīng)推出得到了很好的口碑。就這樣,迎來了大量的客戶。這是后客戶 A 說,你們的遙控器必須有我們的按鍵燈光效果??蛻?B 又說,我要它能自己飛到我手上。但是他們都是在原始的功能上增加了這些特有的功能。這樣子,我們就可以給他們分別創(chuàng)造一個空間,來迭代和修改。這樣三種版本的代碼不會產(chǎn)生影響。具體如何操作呢?
首先我們肯定有一個最新版本的代碼:萬能遙控器基礎(chǔ)功能。
這時候顧客 A 想要在這個基礎(chǔ)上增加燈光的功能了。我們就需要動用 git 的創(chuàng)建新空間的咒語了:git checkout -b xxx。如下圖,就創(chuàng)建了一個 customerA 的平行宇宙出來了。它就是從“萬能遙控基礎(chǔ)功能”衍生出來的。
那怎么查看我們?nèi)康钠叫锌臻g呢?通過 git branch。下面出現(xiàn)的 master 和 customerA 就是我們當(dāng)前具備的平行宇宙。為什么有一個叫 master 呢?那就是 git 誕生初期規(guī)定的。第一個宇宙就叫 master。* 說明了我們當(dāng)前身處哪一個平行宇宙。(當(dāng)前為:customerA)
那我們看一下,customerA 中有些什么吧。如果猜的不錯,應(yīng)該和 master 中的一樣,只包含了一個 “萬能遙控器基礎(chǔ)功能”??吹较聢D,果不其然。
比如此時我們按照 A 客戶的需求做好了 “增加燈光效果”的功能。那么保存之后就是這個樣子的。
好了,我們功能測完之后,這個版本就可以不用動了,于是我們就轉(zhuǎn)戰(zhàn)原始的 master 平行空間去開發(fā)公司新的需求和功能了。我們只需要執(zhí)行 git checkout xxx 就能切換到指定的平行空間了.
同理我們想在 master 的基準(zhǔn)原點再創(chuàng)建一個 customerB 的平行空間,增加代碼功能“會飛”?;竞?customerA 的操作一致,不在贅述。直接上截圖。
最終的效果就是下面這樣子。三個版本之間互不干擾。齊頭并進。想要開發(fā)哪個版本就切換到指定的平行空間就可以了。
不同空間能不能融合呢?答案是肯定的,下一節(jié),咱們聊聊空間融合的細節(jié)。