我以为前几天的 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学习