Git - 軟體工程師必備的版本管理時光機
關於課程
課程包含
課程時長
課程總人數
觀看限制
學習升級
課程內容
版本管理是現今軟體開發大家都一定要會的技能,而 Git 更是目前的版本管理主流。
這門課會教你如何從最簡單的個人版本管理,一直到多人版本管理,以及共同開發時如何有效率的管理程式碼。第一章節 - 工欲善其事,必先利其器
這個單元會先從了解 Git 開始,除了教大家如何在各種作業系統安裝 Git 之外,也會讓大家了解 Git 的底層是如何運作,了解運作原理能在學習 Git 指令時,更容易知道如何理解指令。
1. 安裝 Git2. 了解 Git 的資料模型第二章節 - 要刮別人的鬍子前,先把自己的刮乾淨
在剛開始學習版本管理時,要先學習管理自己電腦的資料。這個單元會讓你學到如何開始利用 Git 管理你的資料,包括新增、修改、刪除,都可以藉由 Git 幫你紀錄每一個步驟,絕對不會遺漏。像是紀錄用的 init, add, commit 指令,以及查看 Git 資料的 status, log, show, gitk 指令,都會完整的教大家如何運用。
從這個單元開始也會有一些小作業,目的是為了讓大家更熟悉 Git 操作。
1. 初始化 Git 並將資料交給 Git 保管 (config, init, add, commit, status)2. 看看你在 Git 上操作的內容 (log, show, gitk)第三章節 - 狡兔有三窟
GitHub 是全世界軟體工程師的寶庫,可以使用 Git 指令將資料完整上傳到 GitHub!
身為一個軟體工程師一定要有一個 GitHub 帳號。這裡會教你如何將自己電腦內已經使用 Git 管理的資料,上傳到 GitHub 或 GitLab。GitHub 除了可以拿來備份以外,也可以與其他工程師分享你的資料並且協作,使用 Git 如果沒用過 GitHub 的話,功效可是會大打折扣喔!
1. 在 GitHub 建立專案 (GitHub, GitLab)2. 從 GitHub 下載專案 (clone, pull, fetch, remote)3. 上傳專案到 GitHub (push)第四章節 - 開枝散葉
Git 與其他版本管理軟體最大的不同,就是在於建立分支非常容易,這個單元會介紹什麼是分支,以及如何將工作拆分成不同的分支,最後將不同分支合併起來。有了分支,Git 就可以與許多的開發流程串接起來,是個非常重要的功能。而操作分支時最常遇到的問題不外乎就是分支衝突,這裡也會教大家如何解決衝突喔!
1. 將工作拆分成可同時進行的分支 (branch, checkout)2. 合併已經完成的分支-1 (merge)3. 重新設定目前分支的起點 (reset, reflog)4. 合併已經完成的分支-2 (rebase)5. 解決遇到衝突的合併第五章節 - 循規蹈矩
在與團隊使用 Git 的時候,若是大家各自建立不同的分支,但又沒有一個準則的話,成員之間就無法了解不同分支的作用。所以發展了許多流行的工作流程,比如 GitFlow、GitHub Flow。
這個單元會分享這些工作流程的優缺點,以及該如何選擇適合你的工作流程。
1. 三種存取模型 (dispersed, collocated, shared)2. 主線開發3. 主線搭配分支開發4. 一功能一分支5. GitHub Flow6. GitLab Flow7. gitworkflows8. GitFlow第六章節 - 其他
從 Git 可以串接出許多與工作管理有關的軟體,比如 GitLab,這個單元也會分享我在使用 GitLab 的實戰經驗分享。
1. GitLab 使用經驗小技巧單元:穿插在各個章節中!
在這些單元裡面也會穿插著許多使用 Git 的小技巧,像是如何列出檔案的每一行修改歷程、如何與版號管理結合等,都是實際在工作時會遇到的一些問題,這些小技巧絕對可以讓你在工作上事半功倍喔!
1. 列出檔案的每行修改記錄 (blame)2. 使用 Markdown 撰寫專案介紹文件 README3. 將想要的 commit 獨立插入 (cherry-pick)4. 暫存還不想放到正式記錄的工作 (stash)5. 取消曾經做過的工作 (revert, reset, checkout)6. 找出這個變更發生的起始 commit (bisect)7. 忽略不想被 Git 保管的檔案 (gitignore)8. 改變歷史 (rebase)解鎖單元規劃!
募資期間門檻達到 150%,解鎖「其他」中新的單元!
- 其他 - 使用 git-extras 增強 Git 的使用體驗
當募資超過 150% 之後,會在「其他」章節加開「使用 git-extras 增強 Git 的使用體驗」,git-extras 增加了許多好用的指令,讓你無論是在操作分支或是想知道有多少人跟你一起協作,都是非常好用的工具!預計於開課後釋出。募資期間門檻達到 250%,解鎖「循規蹈矩」中新的單元!
- 循規蹈矩 - FBI flow
除了一般大家常聽到的各種工作流程之外,FBI (Frontend-Backend integration) flow 是老師自己執行超過三年,完全可行的工作流程,當募資超過 250% 就會加開這個如何前後端整合的工作流程,無論你是哪一類型的工程師,這個絕對不可以錯過!預計於開課後釋出。募資期間門檻達到 500%,再加碼解鎖 Git 與其他軟體整合使用的二個單元!
- 其他 - Redmine 使用經驗
- 其他 - SemVer 版本號管理
當募資超過 500% 之後,會再加開二個老師自己使用 Git 與其他軟體整合的分享,如果有使用 Redmine 或是想知道如何在版本號管理的時候更加便利,這些單元一定要來看看!預計於開課後釋出。募資期間門檻達到 1000%,實體交流會辦起來!
當募資超過 1000% 之後,老師會在期末舉辦免費的實體交流會,Git 是一門易學難精的技術,透過交流會讓同學們互相分享學習心得,順便吃吃喝喝 XD作業設計、回覆頻率預告
- 作業 1 - 建立兩個文字檔,第一個 (3 commits) 為你對這門課的期望,第二個 (2 commits) 為簡單的自我介紹。兩個一起的也要 2 commits。並且使用 git log 及 gitk 各拍一張交出來
- 作業 2 - 在 GitHub 建立一個專案,名稱為 hahow-git-1,並建立兩個文字檔,第一個為你愛吃的水果,第二個為你喜歡旅遊的地方,總共至少要有 3 個 commits,並且上傳回 GitHub,最後將這個專案的網址傳給老師檢查。
- 作業 3 - 將專案 hahow-git-1 建立一個新分支 create-readme,並在這個分支內新增 README.md 檔案,介紹一下你目前覺得最有用的 git 指令。完成後上傳至 GitHub。
- 作業 4 - 將專案 hahow-git-1 的 create-readme 分支合併到 master 分支後,並產生一次合併衝突,解決衝突後上傳到 GitHub。
作業回覆、問題回答頻率
開課前最慢會在 72 小時內回覆同學提出的問題;開課後依照課程進度,最慢會在 48 小時內回覆。
互動方式
開課前會使用 hahow 回覆,開課後將會有學生的專屬 Facebook 社團,屆時將 GitHub 連結上傳到社團裡告知老師即可喔!
📍如果你有這些問題⋯⋯
1. 我不會寫程式是不是會聽不懂?
放心,版本管理的概念跟程式沒有絕對的關係,只要大家日常生活中有管理文件的需求,都一定會到用版本管理。大家如果有用過 Dropbox 或 Google Docs 的話,本身也有版本管理機制,所以你已經在用版本管理只是你不知道而已。所以把 Git 學會,之後對於自己維護資料能更得心應手喔!
2. 黑畫面裡面輸入的內容都是英文,好複雜我都記不住。
放心,裡面使用到的大部分指令都會一再使用,所以只要跟著老師的步伐,之後不用老師提醒也能靈活的運用這些指令了。
3. 我已經有在用 Git 了,這門課程對已經會 Git 的人有什麼好處?
「要刮別人的鬍子前,先把自己的刮乾淨」、「狡兔有三窟」及「開枝散葉」這三個章節算是比較基礎的課程,多學可以加深對於 Git 的基礎。而「循規蹈矩」、「其他」及「小技巧」則是進階使用時會遇到的一些狀況,也有比較新的 FBI flow,所以建議就算你已經會 Git 了,也是強烈建議來上這門課喔!
老師資料 - 教學經歷
- 2017 松山工農:團體共同協作與版本管理
- 2014 宜蘭大學:行動裝置程式設計
- 2013 銘傳大學:行動平台上利用 Facebook API 開發社群應用程式
老師資料 - 工作經歷
- 2018/8 ~ 現在:Funliday 技術長
- 2011/9 ~ 2018/8:三竹資訊 研發副理
- 2008/9 ~ 2011/8:大理資訊 系統分析師
老師資料 - 研討會
- 2018 JCConf:那些大家常忽略的 Cache-Control
- 2018 ModernWeb:如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
- 2017 DevOpsDays Taipei:如何與 Git 優雅地在樹上唱歌
- 2017 JCConf:如何與全世界分享你的 library
- 2016 JCConf:手把手教你如何使用 logback 串接 log 到各種網路服務
- 2015 HadoopCon:Hedis - GET HBase via Redis
- 2014 MOPCON:How to build a scalable SNS via Polling & Push
- 2014 HadoopCon:How to build a scalable SNS using HBase
