昨天聊到刪掉的照片不一定會立刻消失
但我突然想到一個問題
工程師每天都在修改程式,如果不小心改壞了,難道只能重新寫一次嗎?
而且一個專案通常不只一個人一起做,如果大家同時修改程式,那到底要怎麼知道誰改了什麼?
所以今天就來看看,工程師常常使用的 Git 和 GitHub 到底是在做什麼
一、Git 到底是什麼?
簡單來說,Git 是一種版本控制系統
聽起來很專業,但其實可以把它想成是程式碼的「存檔紀錄」
例如今天我寫了一份程式
第一版可以正常執行
結果我隔天心血來潮改了一大堆東西
然後
壞掉了!!
這時候如果沒有版本控制,就可能只能開始回想我昨天到底改了什麼?
但有了 Git,就可以把不同時間點的修改記錄下來
所以當程式真的改壞時,就可以查看之前的版本,甚至回到比較早的版本
有點像遊戲裡的存檔
打 Boss 前先存一個檔
結果打輸了
直接讀取之前的存檔
不用從頭開始
二、Git 可以幫我記住什麼?
Git 不只是單純把檔案複製很多份
它會記錄程式碼的修改歷史
例如
第一版
→ 新增登入功能
→ 修改登入畫面
→ 修正錯誤
→ 新增會員功能
→ 結果改壞了
這些修改都可以留下紀錄
所以工程師可以知道
什麼時候改的
改了什麼
誰改的
如果某次修改出了問題,也比較容易找到是哪一次改動造成的
這對多人一起開發的專案尤其重要
三、那 GitHub 又是什麼?
這裡就很容易搞混
Git 和 GitHub 不是同一個東西
Git 是版本控制工具
而 GitHub 則是一個提供程式碼儲存、協作和管理的平台
可以先用一個很簡單的方式理解
Git = 管理版本的工具
GitHub = 放程式碼、一起合作的平台
例如我在自己的電腦上寫程式
可以使用 Git 記錄每一次修改
接著把程式碼放到 GitHub 上
其他組員就可以看到專案內容,也可以一起修改和討論
所以 GitHub 不只是「工程師放程式碼的地方」
它也可以讓多人一起合作開發
四、如果很多人一起改程式,不會打架嗎?
這就是 Git 很重要的地方
假設我們有一個專題
我負責登入功能
組員 A 負責首頁
組員 B 負責資料庫
大家可以各自處理自己的部分
完成之後再把修改整合到專案裡
如果不同人修改到同一個地方
Git 也可以把衝突標記出來
讓工程師知道
欸,你們兩個改到同一段了
這時候就需要人工確認到底要留下哪一個版本,或是把兩邊的修改整合起來
所以 Git 並不是自動幫你解決所有問題
而是幫助團隊知道到底發生了什麼
五、那為什麼 GitHub 這麼常被使用?
因為現在很多軟體開發都是團隊合作
如果每個人都把程式碼存在自己的電腦裡
然後每天互相傳檔案
可能很快就會出現
「你這是最新版嗎?」
「我不知道,我剛剛改過了」
「等等,我的版本跟你的不一樣」
這種很崩潰的情況
有 Git 和 GitHub 之後
大家可以透過版本紀錄和協作機制來管理程式碼
也可以看到專案過去的修改歷史
對大型專案來說會方便很多
六、心得
以前看到 GitHub 的時候
我知道是一個工程師很常用的網站
但今天才發現
它其實跟我們平常用的「檔案管理」很像
只是管理的不是普通文件
而是程式碼和整個軟體專案
而 Git 最讓我覺得方便的地方就是
不用害怕自己把程式改壞
因為至少還有之前的版本可以回頭看
現在也比較能理解為什麼工程師常常會說
先 commit 一下
原來就有點像是在幫目前的程式狀態存一個紀錄
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
明日預告
今天知道 Git 可以幫工程師記錄程式的不同版本
但我又突然想到一個問題
如果同一個程式要在不同電腦上執行,為什麼有時候在我的電腦可以跑,換一台電腦就突然不能跑了?
明明都是同一份程式,為什麼還是會出現這種問題?
那明天就來討論一下
「Docker 為什麼要把程式裝進盒子裡?」