type
status
date
slug
summary
tags
category
icon
password
前言
首先将自己的gradescope成绩放过来
早在进行CS61B学习之前就听说过
gitlet
的大名,可以说这是来自UCB的课程中最为出名的项目之一,它包括了60多页的Spec文档、几乎为零的skeleton代码(仅提供了几个相关的类)、相当繁杂的文件操作以及链表构建还有令人纠结的诸多逻辑。我从gitlet上花费的时间没有具体计算,但从开始构建Merge命令的时候,我开始使用wakatime来记录自己编写代码的时间,所以以下时间可以看做是我构建Merge+debug代码的时间,这里列出。
是的,光是构建merge指令,加上debug的时间就已经有14个小时了,也就是说整个项目起码有30+小时的时间进行构建,这还只包括敲代码的时间,还不包括思考思路的时间,大家可以想象一下这个项目的难度。
学习到的东西
但是!虽然我说了这么多,如果你要问我这个项目值不值得,我还是觉得非常的值。
通过gitlet这个项目,我学习到了:
- git操作的底层原理,之前一直了解,但知识结构不是很清晰
- 听说gitlet的
remote
相关操作底层原理和真实git其实有不小差距,加上时间原因实在不允许我慢悠悠再构建remote相关代码,我就没有将其实现,如果是本科的同学们有比较充裕的时间,可以来进行对作为extra部分的remote相关进行实现 - 准确来说是学习了对一些功能在底层实现上面的解构思想
- 文件形式的链表操作,同时学习了BFS广度优先在代码中大致怎么实现的
- 面向函数式编程,这个思想我觉得是项目构建的很重要的一环,在想要一个功能的时候,编写一个功能的函数,然后将文件中相关功能的部分解耦合,这样就在修改的时候就不需要分别进行更改
- 但这个其实项目做多的之后,本能上就是会意识到这个问题,会实现模块解耦
- 但是抽象性思维真的很重要,所以说不管怎么说还是重新意识到了这一点
- 集成测试的思路
- 有但不多,因为我为了节约时间都是直接在网上找了找大家爬下来的testing文件进行的面向测试编写
- make的使用
- 有但不多,基本都是直接使用make指令,过两天找找相关make的文章再详细地学学
项目构建
这方面内容我写在Repo中了,有兴趣的同学可以去看看:https://github.com/thanyi/gitlet,但是最好还是自己看看思路就好
相关链接
- 对于gitlet的构建:https://github.com/thanyi/gitlet