在知道怎麼的簡單的建起一個應用程式之後,應該會迫不急待的想要加入更多的新功能吧?但是先等一下,我們要來聊一個不是寫程式,但跟程式有關的話題。
這塊地圖正式的名稱叫「軟體工程」,研究的是當程式愈來愈複雜的時候,我們要了解怎麼管理各種程式碼,有哪些工具,大家怎麼合作,怎麼做計劃等知識。
而怎麼不讓 AI 弄壞你的程式真正的好方法,就是軟體工程中的版本控制。如果你有聽過 git
這個字,這就是目前最流行的版本控制工具。
我們用一個在學校繳報告的例子,來解釋版本控制怎麼運作,有什麼好處。
老師要大家繳一篇動物園的心得報告。小明寫了這樣的內容:
昨天戶外教學,我去了動物園。
然後存檔成 📄作文.txt
過了一下,他覺得應該再多寫一點,所以他把內容修改成這樣
昨天戶外教學,我去了動物園,看到很多動物。
我最喜歡的是大象,牠的鼻子好長。
但是他又怕或許第一版寫得比較好,所以他留著第一版,另外存了一個新檔案 📄 作文_修改.txt
然後他修改文章,一邊存新的檔案。過了兩天,他的電腦的文件夾有這些檔案:
📄 作文_修改2.txt
📄 作文_最終版.txt
📄 作文_最終版_真的最後.txt
📄 作文_最終版_真的最後_確定版.txt
📄 作文_最終版_真的最後_老師叫我改一段.txt
其實他已經不太分得出來哪個是最後的一份文件了。
讓我們回到還沒有搞砸的過去,重來一次。小明用 Git 來管理他的作文,只有一個檔案 📄作文.txt
。
第一次寫完存檔的內容是這樣
昨天戶外教學,我去了動物園。
然後小明使用 git 的「儲存版本」(git commit) 功能,並幫這個版本取了一個名字:「寫了開頭」。
接著小明寫了更多的內容:
昨天戶外教學,我去了動物園,看到很多動物。
我最喜歡的是大象,牠的鼻子好長。
小明再次用 git 的「儲存版本」(git commit) , 版本2的名字是 「加上大象的描述」
第三次新增內容:
昨天戶外教學,我去了動物園,看到很多動物。
我最喜歡的是大象,牠的鼻子好長。
猴子很頑皮,一直跳來跳去想要搶我們的零食,我超想揍它的。
小明再次用 git 的「儲存版本」(git commit) , 版本3的名字是 「加上猴子的部份」
Git 的「儲存版本」功能,每次都只會記錄差異的部份,所以不用存重複的部份,很省空間。
由於每次記錄都會自動附上是什麼時間儲存版本的,所以可以看到一路以來的修改歷史(git log),也能馬上知道最後一個版本是哪一個。
💾 版本3:「加上猴子的部分」 - 2024/10/02下午3點
💾 版本2:「加上大象的描述」 - 2024/10/02下午2點
💾 版本1:「寫了開頭」 - 2024/10/02 下午1點
下面是一個真的用 Git 管理的範例,可以看到在某一次的修改中,在init.lua
這個檔案中,刪掉了兩行(紅的),新增了一行(綠的)。
老師說:「第二版寫得比較好,第三版的猴子那段不太好。」
小明只要使用 Git 裡「回到版本2」(git checkout) 的功能,作文就變回:
我的暑假很開心,我去了動物園,看到很多動物。
我最喜歡的是大象,牠的鼻子好長。
這樣不需要每個檔案都打開來看,也不用擔心之前的內容不見了。
小明想要知道版本 1 跟版本 3 差在哪裡,可以使用 Git 的「比較版本」(git diff) 功能,Git 會告訴他:
+ 我最喜歡的是大象,牠的鼻子好長。
+ 還有猴子很頑皮,一直跳來跳去。
前面的 +
號表是這一行是新加入的。
如果這個報告是要兩個人一起寫的,可以使用 Git 的「分支功能」(git branch),先各自寫自己的部份:
主要版本(main)
│
├─ 小明的版本(加入動物園)
│
└─ 小華的版本(加入遊樂園)
最後在用「合併功能」(git merge) 把全部的內容合在一起。
我們知道軟體工程是討論怎麼開發跟管理軟體比較好的知識領域,也學會了版本控制這個概念。目前最流行的版本控制工具叫 Git。
Git 基本上有以下幾個重要的功能 (其實還有很多,但是先看這些就好)
git commit
git log
git checkout
git diff
git branch
git merge
下一章,我們就來幫我們的網頁程式加上 Git 控管,並看看為什麼 AI 這樣就不會弄壞我們的程式了吧!
跟 AI 討論看看一下,如果小明跟小華在自己的分支裡都修改了作文的第一行,那合併的時候要怎麼辦呢?
又打開了一個新的領域了!