研究所畢業後第一件事情不是打開求職網站投履歷,而是回頭去讀那些一直知道很重要、之前卻因為要趕論文而無暇複習或學習的觀念。
而首個要深入探究的內容,是學校不教、但出去工作後一定要會,而且幾乎每個領域都會用到的 git。雖說之前在 AppWorks School 已經有被要求用 git 做版本控制,但當時對於 git 是怎麼運作的還是一知半解,整天亂 commit 也不知道自己在做什麼,真的要團隊協作或為挽救錯誤而退回先前版本,幾乎都在亂弄,等於是有好工具在手,卻無法將其效益最大化,十分可惜。
這次藉由參加鐵人賽,希望能藉此把握這一個月的時間,好好回頭讀 git,並在沒有專案的壓力下,好好透過實驗觀察每道指令帶來的變化,希望能對 git 內部的運作有更深入的了解,未來要使用這套工具時,才不會像之前在那邊胡搞瞎搞。
對於第一次接觸 git 的人來說,這系列文章或許不適合你,雖然最前面還是會很快帶過入門觀念,但主要是用來快速複習,而非詳細講解,有點類似大學課程會先快速講過高中課程內容,才開始進入真正的課程主題。
如果想要入門 git,網路上有非常豐富的免費資源,例如:
上述文章從安裝到常用指令都有詳細介紹,如果連安裝及基礎指令都還不會,建議從這幾篇文章開始看。
當然,如果想要直接跟著本系列文章學也不是不行,但就會像跳過高中、直接去修大學課程,步調相對較快(例如不會講怎麼安裝),但如果能跟上,那對於 git 的掌握度會比單純看入門課程更高。
現在假設要在 git 資料夾中建立一筆快照、形成 commit,要怎麼做呢?
我知道!就兩個步驟嘛!
git add
git commit
那如果不要用這兩個指令,要怎麼做出一個 commit 呢?
天啊!這是什麼問題?要生出 commit 卻不用上面兩個指令,天底下有這種事情?
其實是可以的,且看以下步驟:
git hash-object
git update-index --add
git write-tree
git commit-tree
git update-ref HEAD
現假設有一個 git 資料夾,已經透過 touch hello_world.txt
建立一個名為 hello_world.txt
的空白文字檔,若透過我們本來會的兩步驟指令建立 commit,流程會長這樣:
透過 git log
可以看到已經成功建立最新的 commit,雜湊碼為 53663f4...
。那如果用剛剛那五個看起來很複雜的指令呢?
最後的 git log 一樣發現做出了一個雜湊值為 e446364...
的 commit。
等等,為什麼要把步驟搞這麼複雜?透過這些操作,我們可以發現到在下 git add
與 git commit
指令時,git 實際上幫我們做的事情(類似寫 C 比寫 Python 更能知道記憶體的配置等操作細節)。
這系列的文章不會難到所有細節都要親自操作,但會觀察在下常用指令時,git 在後面幫我們做的事情,有助於讓我們對 git 有更深一層的了解,如果日後遇到各種狀況,可以有多一層次的思考。
總之,我們會「觀摩」git 在幕後幫我們做的事情,但不至於要「操作」這些繁瑣的程序,就當作參觀 git 工廠,來看看其生產線是怎麼運作的吧!
旅程開始!