本项目仿照git使用go实现了一个简单的版本控制系统,实现了git add, git commit, git log, git reset, git branch等命令
git每次改变,commit存储的是一个快照,而不是改变的内容,这样可以保证每次commit都是一个完整的版本,而不是增量的改变。
主要命令如下: commit: 提交一个快照 log: 查看提交历史 reset: 回滚到某个版本 branch: 分支管理
got init 初始化一个git仓库
got add 添加文件到暂存区
got commit 提交到版本库
got log 查看提交历史
got reset 回滚到某个版本
|
|
对于Commit来讲,同一个对象应当包含相同的message,parents,date,blobID,其中message是每次执行gitlet commit时附带的信息,例如“init commit”,“add file1”等等;parents中保存的是前一个Commit的ID信息,当执行完merge操作时,会将两个Branch合并,这时候,合并完的Commit会指向两个commit,也就是说这个Commit的parents中有两个ID;date是执行commit时自动生成的时间信息,在这里,一定要注意,gradescope会要求时间信息的格式Wed Dec 31 16:00:00 1969 -0800,不是这个格式会在gitlet log命令中报错;最后是blobID,每个Commit对应多个保存的文件,只需要将文件的blobID保存在Commit当中就可以在objects文件夹中找到对应的Blob对象了。
总结一下,objects文件夹中保存着所有的Commit和文件信息,不管是Commit还是文件,都被称为对象,每个对象都有一个独一无二的ID,所以要想确定一个对象,只需要知道它的ID就可以在objects文件夹中找到了。
我在2024/3/16日在github提交了我的第一个用go实现的git项目
今天是2024/3/21,项目进行到了:完成init和commit的部分功能
正在编写将blobID和文件路径相关联的部分
这一部分的关系十分复杂,让人头疼
2024/3/24 更新: 在昨晚我完成了storeblob的部分,在今天实现了add功能,但是dl快到了,感觉要做不完了