iT邦幫忙

2025 iThome 鐵人賽

0
Software Development

深入一點點認識 Git系列 第 31

iThome 鐵人賽初體驗完賽回顧:《深入一點點認識 Git》

  • 分享至 

  • xImage
  •  

Medium 好讀版點此


我終於!終於!終於完成 iThome 鐵人賽挑戰了!

https://ithelp.ithome.com.tw/upload/images/20251001/20178513QxBTsiS6YP.png

特地選在九月一號開賽,九月的每天都發布一篇,等全部都發完就剛好是九月結束的日子,但這也代表九月的每一天,都有股隱形的壓力,深怕一個疏失,就要明年再來。

為什麼參加鐵人賽?

早在考研究所前數個月,我就已經養成撰寫技術文章的習慣,原本只是寫研究所考科的筆記,沒想到居然還有超過兩百人追蹤這我認為內容頗為無聊的技術部落格!當然,寫這些東西也不可能走流量導向,我只是把當下學到、且花較多時間理解的資訊領域知識寫下來,哪怕是在美國交換時也是如此,目的只有一個:等以後要複習某個知識點時,回來看自己的寫的筆記就能快速掌握。

而在資訊領域,寫技術文章正好有個里程碑值得我去挑戰,就是「鐵人賽」!要選定一主題,連續發文三十天,而我的文章字數通常都達數千、甚至上萬,圖都還堅持全部手繪,非常耗時,在要處理學校課業與論文的時期,實在難以達成。

就這麼剛好,2025 鐵人賽在我領到碩士畢業證書後不久開放開賽,這對已經沒有外務、又希望在履歷上多累積些成果的我來說,無疑是最棒的參與時機!畢竟之前當資訊家教時都鼓勵學生參賽,若自己沒有完賽經驗,實在說不過去。

雖然在九月才開賽,但我在七月底就開始撰寫,有不少內容甚至還因為初版不滿意而重寫,因此,名義上只為期一個月的挑戰,我卻足足花了超過兩個月!

深入一點點認識 Git

連續發文三十天聽起來頗具挑戰性,但參加這比賽真正困難的,其實是「選題」,究竟以什麼為主題,可以連續三十天保持輸出?

我想到了碩三上旁聽 Azole (小賴) 老師上課講到 Git 時,提出的兩個問題:

  1. git init 之後,跑出來的 .git/ 資料夾裡面有什麼?
  2. git addgit commit 之後,.git/ 資料夾發生了什麼變化?

聽到問題的當下,我的腦袋一片空白!對耶,這個軟體的各子領域必備工具 git 到底背後是怎麼運作的,我居然完全不知道!想當初在 AppWorks School、以及後來在學校做專題時,表面上有用 git 進行版本控制與團隊協作,實際上都在亂 commit、分支隨便切、衝突隨便解,最後分支跟 commit 紀錄都一團亂,明明有用 git,卻沒有讓這好用的工具發揮其該有的效果。

那我何不把握機會,就以 git 的內部運作為題參加鐵人賽?一邊寫、一邊做實驗觀察、一邊試著解說,這樣等三十篇全部發完,我不就對 git 有更深入的了解?再者,雖然網路上的 git 教學文非常多,但針對「內部運作」這種進階內容的著墨非常少,於是,我便仔細觀察常用之 git 操作為 .git/ 資料夾帶來的變化,列出以下三十篇的主題:

  1. 關於此系列文的內容及難度定位
  2. 上層的瓷器(Porcelain)與底層的管路(Plumbing)指令
  3. 什麼是 Git 物件?
  4. 那些 Git 物件的雜湊碼是怎麼算出來的?
  5. 上層瓷器指令複習(本地端未開分支流程)
  6. 上層瓷器指令複習(本地端分支管理)
  7. 上層瓷器指令複習(與遠端倉儲互動)
  8. 打完 git init 指令後,發生了什麼事?
  9. 分支與 HEAD 的本質:參考(refs)
  10. git add 之後,.git/ 資料夾發生了什麼變化?
  11. git commit 之後,.git/ 資料夾發生了什麼變化?
  12. 更改檔案內容後,.git/ 資料夾發生的變化
  13. git reset 三種不同模式與 git revert 對 .git/ 資料夾的影響
  14. git diff 到底在比較什麼?
  15. 可以是、也可以不是物件的 tag
  16. 用 git stash 先暫存進度
  17. git stash 把進度存到哪了?
  18. git cherry-pick 到底怎麼搬 commit 的?
  19. 兩種不讓檔案被 Git 追蹤的方式:.gitignore 與 .git/info/exclude
  20. 不是把檔案都塞進 .gitignore 就可確保其不被追蹤
  21. 用 git 指令把檔案刪掉
  22. 為什麼我不再使用 git checkout
  23. 合併與合併衝突時,Git 內部是怎麼運作的?
  24. git rebase 不是直接把一分支上的 commit 搬到另一分支
  25. 對 commit 的任何更動其實都是在做新 commit
  26. git filter-branch 可以改寫歷史,但還不足以完全清除檔案紀錄
  27. 透過 git gc 指令觀察 git 的打包機制
  28. 那些在 .git/ 內還沒提過的資料夾與檔案(hooks/、config 與 description)
  29. git fetch/pull 與 git clone 不只使用時機不同
  30. 在遠端開分支 & 合併分支跟在本地進行效果一樣嗎?

在一邊做實驗、一邊寫文章參賽的過程中,我才知道原來 git 還有物件、原來針對 commit 細節的調整都會做出新 commit、原來 git 還有打包機制、原來在 GitHub 上開分支或合併分支的 commit 會自動帶有簽章...!也是透過這些簡單的實驗觀察,我在日後做專案用到 git 時,才踏實地感受到自己真的知道怎麼用這套工具、這些工具又是怎麼幫我做事的,就算不記得細節,日後回去看當初鐵人賽寫的文章,也能快速複習。

完賽之後

首先當然是好好休息!參賽的每一天,我都過得有些緊繃,雖然身為剛領到碩士畢業證書的畢業生,覺得難度並沒有比寫論文來得高,但那種只要一天忘記發文就等同宣告失敗的壓力,還是讓我有微微的焦慮感,每天吃完早餐後的第一件事情就是發文,某些日子早上有行程,也一定要在出門前就完成發文,深怕如果下午或傍晚回來才發,搞不好就寫不完或不小心忘記、前功盡棄。

然而,鐵人賽挑戰只是「當初因為要趕論文而被擱置」的待辦清單之一,清單上還有好幾個項目,接下來要持續努力!


上一篇
Day 30-深入一點點認識 Git:在遠端開分支 & 合併分支跟在本地進行效果一樣嗎?
系列文
深入一點點認識 Git31
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言