MemMaster 的开发是用 Fossil 做版本管理的。最近需要分支开发,于是研究了一下 Fossil 的分支处理。(但是在研究过程中对我的仓库造成了永久性不可恢复的损害……)
Be careful!fossil 有个不知该说好还是坏的设计,commit 之后就永远不能再修改了……不过可以有限地补救一下,只不过补救其实是个新的 commit。
原理
官网 wiki。我来总结一下。fossil 使用签入标志(check-in tag)区分分支。每个分支的最新签入被称为开叶(open leaf),即允许有 children 的 leaf。如果在这个开叶上新建分支,则这个开叶被称作分支点(branch point)。如果两个人同时对某一个签入作出改动,其中一个人首先commit,那么原来的开叶标记会移动到新的签入上,后来的人将无法推送修改,那么此时就应该弄个分支,然后再回到原分支合并回去。与开叶相对,有闭叶(closed leaf),最后一个签入是闭叶的分支将永久封存,不得进一步修改。
新建分支
fossil 要求创建分支时提供 basis,即从哪个签入分支。虽然看上去好像nb了些,实际上徒增麻烦而已。
# fossil branch new [分支名] [基础] fossil branch new testing trunk fossil branch new testing [commit编号]
切换分支
fossil 不支持就地切换,你得再 open 一次。
cd .. mkdir branch-testing cd branch-testing fossil open /path/to/repo.fossil testing
查看当前分支
fossil branch ls
当前分支的名字前面会有一个 *。
删除分支
删除分支?开玩笑呢。你只能把一个分支关闭,相当于删除了。这个很简单,在 timeline 的最后一个 leaf 那里,点 edit,然后 close 掉就行了。当然,close之后,branch ls、web 界面里面是没有显示的。