- 论坛徽章:
- 2
|
回复 42# starwing83
纳尼? dracs不是 David's Advanced Revision Control System的意思?
丑陋的女人是怎么来的。。。?
git管理的是含有chronological order的branches。 dracs管理的是sets of patches。
对一个git仓库:
- branch0
- +--- F <- G
- |
- v branch1
- A <- B <- D <- E
- ^
- | branch2
- +--- H <- I
复制代码 对dracs而言, branch0是由 A, B, F, G 这4个patches组成(git实现策略不是changeset而是snapshot)。 branch1, branch2同理。
但dracs可以构建出这样一个状态: 由A, F, G 这3个patches组成。 这很容易, 因为dracs管理的就是set of patches。
你用git实现看看。。。 就得把B从中间抹去。。。 因为git是有chronological order的。
对管理一些极为松散的项目。 比如我本地的一些notes,它们之间的联系很少。
我想抽出里面的若干文件 —— 比如我要把clojure相关的notes单独整理出来 —— 以及它们的记录来组成一个新的仓库(不再包含其他notes)就很容易。
剩余的notes再作为另一个仓库也很容易。
而git,因为它有年代顺序, 就基本是在重写整个仓库了。也就是说git把年代顺序给耦合了。。。
dracs没有,但弄一个出来很容易,给组成状态的那个set增加一个顺序就ok了。 这个仅仅是为了追踪历史而做的,不是dracs必须的。
哪怕就是实际的项目,你用过git cherry-pick 没。。。
从svn -> git来看,这是一个进步。 但从dracs来看, git的cherry-pick就不方便了。
比如上面的图里, branch1 cherry-pick I, 得到 A <- B <- D <- E <- I'。 注意那个'。
branch2就要rebase(呃,这个例子没举好,无论是否cherry-pick, branch2想要合并到branch1都得rebase)。
而dracs直接将那2个patches收进来就完了。。。
所以git项目参与的人多了之后,rebase以保持一个干净的、线性的(没有多parents)的历史就不容易了,太耗人力了。
就倾向于使用merge commit, 树型就树型吧。。。 |
|