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