本文主題是如何向工具初學者介紹分散式版本控制系統 Git。除了瞭解關於 Git 的基本知識以外,大家還可以學到一些工具學習方面的東西。
我發現的問題
我的一些職業經歷涉及跨職能領域,因此我瞭解所有同事的工作方式。我記得有一家公司在我加入的幾周前才開始使用 Git。
我用三步把 post-it 放到螢幕上:第一步是 add,第二步是 commit,第三步是 push。
他們不知道為什麼要用這三步,他們只知道為了防止發生其他問題,他們應該遵循這三個步驟。但是問題還是頻頻發生,所以我決定準備一個關於 Git 的討論會。
想法
我喜歡在頭腦中繪圖。我不寫「思維導圖」,因為它們是眾所周知的影像形式。而我所說的「圖」是一種大腦中的有框架、結構化或其他形式的影像表徵。例如,我在頭腦中想象骰子來學習加法。
所以我準備了一些圖。理解這篇文章不一定需要看懂這些圖。但出於可訪問性,我對每一張圖都作出瞭解釋。在這種情況下,詞彙的教學就非常重要了。否則他們無法理解來自 Git 的資訊。這些圖是一種很好地向他們介紹詞彙的方式。
分散式版本控制系統
概括圖包括四部分,分別是:
開發環境中的:
工作區
暫存區或索引
本地版本庫
伺服器中的:
遠端版本庫
到那個時候,你就可以解釋分散式版本控制系統的好處了。
複製版本庫
在複製版本庫時,遠端版本庫中的資料要傳遞到兩個區域:
工作區
本地版本庫
在工作區中進行更改
工作區中有兩類檔案:
追蹤檔案:Git 知道的檔案。
未追蹤檔案:因為尚未新增因此 Git 不知道的檔案。
更新遠端版本庫
當工作區更改就緒時,必須先把它們新增到暫存區中。當暫存區中有一組特定的更改時,我們就需要在本地庫中建立帶有這些特定資訊的 commit。
當本地版本庫中有一或多個準備和世界其他地方共享的 commit 時,我們必須把它們 push 到遠端版本庫中。這時,開發環境中的檔案狀態已經有所不同了:已修改、已暫存和已提交(modified, staged and committed)。
此外,你還可以解釋:
如何顯示工作區的檔案更改:git diff
如何顯示暫存區的檔案更改:git diff –staged
在將檔案新增到暫存區後,如何在工作區中更改檔案
等等
更新開發環境
抓取(fetch)
執行 git fetch 後,遠端庫中的資料將僅傳遞到本地庫中。
Pulling
當執行 git pull 後,遠端庫中的資料會傳輸到兩個區域:
本地庫:抓取(fetch)
工作區:合併(merge)
你可以用 git pull—rebase 檢視 commit 歷史。它是由 fetch + rebase 而不是 fetch + merge 組成的。它將會重新執行你的本地提交,而且你無法看到提交歷史中已知的 diamond shape。
下一步
你可以在開發環境中新增另一個區域來解釋暫存區:dirty work directory。
如果人們將這些概念內化,他們就可以建立堅實的基礎,從而更容易地使用分支、提交歷史以及衍合(rebasing)等。
溫馨提示
我也曾用過其他版本控制系統(Visual SourceSafe、TFS 和 Subversion),以我的個人經驗來講,缺乏知識對於使用舊工具和新工具而言都有害。我們不僅僅要選擇工具,還要掌握工具。
擴充閱讀:https://git-scm.com/book/en
原文地址:https://rachelcarmena.github.io/2018/12/12/how-to-teach-git.html