一直对 git 的实现比较感兴趣,尤其是分支切换及版本回退部分,git Pro 这本书也看过对应的原理,但也是看过就忘,印象不深,git 的源码也太多无从下手,索性自己根据原理从零开始模仿 git 的命令做了个版本控制,因为自己对 js 比较熟,涉及到文件操作自然也选择了 node,目前实现了基本的功能( init,add,commit,branch ),操作实体对象也根据 git 原理实现了 blob、tree 和 commit,一套写下来对 git 的实现有更深入理解,这里也分享给有需要的朋友。
目前已实现的功能:
- gito init:初始化项目,与 git init 的实现一致;
- gito status:查询 repo 的状态,与 git status 的实现一致;
- gito add:将当前工作区文件添加到 gito 暂存区,目前不支持参数,与 git add <pathname>类似;
gito commit -m "commit description":将已经加入暂存区的文件提交到版本库,与 git commit -m "description"功能一致,但目前只实现-m 参数;</pathname>
- gito checkout -f "filename":将未提交至版本库的文件还原为当前 HEAD 指向的版本,与 git checkout "filename"实现一致;
- gito reset --hard:还原到上次提交的状态,与 git reset --hard 实现一致,目前暂不支持还原到指定提交版本;
- gito branch <branchname>:新建分支,与 git branch <branchname>一致;</branchname></branchname>
- gito branch -s <branchname>:切换至指定分支,与 git checkout <branchname>一致;</branchname></branchname>
- gito branch -l:查看当前所有分支及当前所在分支,与 git branch 一致;
- gito branch -d <branchname>:删除指定分支,与 git branch -d <branchname>一致;</branchname></branchname>
围观地址: https://github.com/Geocld/gito