我以爲前幾天的 curl 練習進展順利,因此今天我醒來後,想嘗試編寫一些 Git 練習。Git 是一大塊須要學習的技能,可能要花幾個小時才能學會,因此我分解練習的第一個思路是從「導航」一個存儲庫開始的。linux
我原本打算使用一個玩具測試庫,但後來我想,爲何不使用真正的存儲庫呢?這樣更有趣!所以,咱們將瀏覽 Ruby 編程語言的存儲庫。你無需瞭解任何 C 便可完成此練習,只需熟悉一下存儲庫中的文件隨時間變化的方式便可。git
開始以前,須要克隆存儲庫:github
git clone https://github.com/ruby/ruby
複製代碼
與實際使用的大多數存儲庫相比,該存儲庫的最大不一樣之處在於它沒有分支,可是它有不少標籤,它們與分支類似,由於它們都只是指向一個提交的指針而已。所以,咱們將使用標籤而不是分支進行練習。改變標籤的方式和分支很是不一樣,但查看標籤和分支的方式徹底相同。編程
執行這些練習時要記住的最重要的一點是,如本頁面所述,像9e3d9a2a009d2a0281802a84e1c5cc1c887edc71
這樣的 Git SHA 始終引用同一個的代碼。下圖摘自我與凱蒂·西勒·米勒撰寫的一本雜誌,名爲《Oh shit, git!》。(她還有一個名爲 ohshitgit.com/ 的很棒的網站,啓發了該雜誌。)ruby
咱們將在練習中大量使用 Git SHA,以使你習慣於使用它們,並幫助你瞭解它們與標籤和分支的對應關係。bash
全部這些練習僅使用這 5 個 Git 子命令:curl
git checkout
git log (--oneline, --author, and -S will be useful)
git diff (--stat will be useful)
git show
git status
複製代碼
3db12e8b236ac8f88db8eb4690d10e4a3b8dbcd4
。找出當時 Ruby 的代碼行數。hash.c
的歷史記錄。更改該文件的最後一個提交 ID 是什麼?hash.c
的變化:將 master 分支上的文件與提交 3db12e8b236ac8f88db8eb4690d10e4a3b8dbcd4
的文件進行比較。hash.c
的提交,並查看該提交的差別。v1_8_6_187
和標籤 v1_8_6_188
之間更改了多少文件。v1_8_6_187
對應的提交。.git/refs/tags
。運行 cat .git/refs/tags/v1_8_6_187
來查看其中一個文件的內容。HEAD
對應的提交 ID。test/
目錄進行了多少次提交。65a5162550f58047974793cdc8067a970b2435c0
和 9e3d9a2a009d2a0281802a84e1c5cc1c887edc71
之間的 lib/telnet.rb
的差別。該文件更改了幾行?v2_5_1
和 v2_5_3
)(這一步有點棘手,步驟不僅一步)e51dca2596db9567bd4d698b18b4d300575d3881
並建立一個指向該提交的新分支。git reflog
以查看你到目前爲止完成的全部存儲庫導航操做。via: jvns.ca/blog/2019/0…編程語言
做者:Julia Evans 選題:lujun9972 譯者:wxy 校對:wxy學習