Shell's Home

May 3, 2012 - 1 minute read - Comments

dvc和vc简评

我有必要换git么

实话说,这得分干吗。目前的推荐是,如果是企业级项目,对权限要求比较严格,你必须用svn。如果是普通项目,你可以尝试使用git,但是这并不表示git是最适合你项目的。有的时候svn比git合用的多。

svn是什么模式

svn的核心思路是,取出,修改,提交,合并。即,你从核心库中取得数据,修改,然后提交上去。如果有两个一样的修改,那么要求你进行合并。当然,svn工具会首先尝试自动合并,然后再让你手工干。但即使如此,合并的时候还是很费力。

svn的模式很容易理解,然而在使用中却有两个实际缺陷。

  1. 保存数据的唯一方式就是提交,而提交是不可撤销的。
  2. 必须连接核心库使用。

第一点问题,就是说,如果你希望暂时保存一下当前的修改状态,然后进行某个测试性修改。如果失败,退回当前。抱歉,做不到。你的提交一定会进入svn库。虽然你可以退回到你提交前的版本,但是很麻烦,而且版本记录不会消失。而第二个问题更加致命。如果在网络不稳定/没网络的时候,还干不干活了?

因此,svn的设计模式并不鼓励你提交。当你有修改的时候,你必须保持修改的状态,直到某个稳定的状态。你需要检查代码是基本可用的,然后才应当提交。svn提交有个基础原则,不能塞住head,讲的就是这个。

所以有了hg

hg正是为了解决上述问题而出现的。hg实际上是用python实现的,解决上两个问题的svn。

hg拥有本地版本库,这解决了离线模式。至于暂存性提交,你可以在本地随便提交。只要不提交到核心库上,就不会导致塞住。如果你觉得本地库不行,可以直接重新co,而不进行push。

git和hg哪个好

锤子和扳手哪个好?我永远无法回答你这个问题,因为这两个的目标根本不同,因此根本没有可比性。同样,git和hg的工作流程和模式完全是两回事,因此不要问这个问题,没意义。

哦,那么git是

git的设计核心思路,是取出,分支,修改,提交,合并分支。git的分支是处理工作的利器。

要彻底理解git,你必须接受平行世界假定。假设世界并不是顺序发展的,由于你的选择不同,而会变成不同的几个分支。git可以让你在分支间自由穿越,并且让世界变成某个分支上的某个点的状态。你可以重新选择,产生一个不同的分支。当你需要时,可以对两个分支进行合并。如果两个分支从源头分开后,对世界的影响各自不同,那么合并就是自动的。

git的同步就是在同步这颗世界树。树扩展成什么样子和你在树的什么位置没有关系,因此fetch后如果不chechout,那么就不会应用最新的修改。

我没看出多大区别

实际是非常大的。有了平行世界假定,我可以正交的对一个源码做两件以上不同的事情。而在hg中,虽然也可以做两个不同的分支,然而却很难在两个分支间切换,从而使得切换到做另一件事情非常困难。这也导致了一个人实际上只能做一件事情,否则就无法将过程同时纳入vc管理,又满足正交。

Tags: program versioncontrol

首次bsp日记 关于翻墙服务几句

comments powered by Disqus