?

Log in

No account? Create an account

January 5th, 2007

fedora 蓝色小药丸

svn

http://svnbook.red-bean.com/nightly/en/index.html
http://svnbook.red-bean.com/nightly/zh/index.html

昨天Collapse )

觉得 svn 不可能没有缺点。觉得最大的缺点是那些 step by step 文档写得太差了,但是像 svnbook 这样全局观点的文档又太少 :(

CSDN这一篇列出了一些缺点
档案保留
  我们无法取得 Subversion 档案的独占编辑权. 这是因为 Subversion 的工作模式, 是让各个工作的人取得工作复本, 各自编辑后, 再于送交时进行合并. 不过有的时候, 我们还是得要先取得档案的独占编辑权, 像是在编辑图形文件. 此时, 由一个人统一对某个档案进行编辑, 要比事后合并要简单地多了.
  合并点
  当一个项目开始产生分支时, 常常我们得先将目前分支的更动合并至主发展线, 这些被合并的更动, 就称为合并点. Subversion 并不会记住分支已经采用了哪些合并点, 也就是说, 如果在合并更动之后, 在合并的地方又有了更动, 日后当分支发展完毕, 整个分支的更动需要合并至主发展线时, 由于系统不会记得已采用了哪些更动, 而已合并的地方又更动过, 就会造成同一个更动被合并两次, 此时后来的更动几乎可以肯定会造成档案的冲突, 必须由使用者进行排解. 如果系统能够记得合并点的话, 已采用的合并点就毋需再采用, 也就可以减少使用者必须手动进行冲突排解的次数.
  档案版本
  在 Subversion 中, 版本号码是整个系统共享的. 这个意思就是说, 如果一个项目的档案因修改而有版号的更动, 那么所有档案的版号都会跟着更动. 这对由 CVS 移转过来的使用者是最难以接受的, 需要花一点时间习惯.
  但是, 在这种全域版号下, 我们无法很简单地回答这样的问题: 某个档案的第一个版本长什么样? 在目前最新版的前两个版本作了什么更动? 你知道, 有些时候, 我们就是需要像这样的功能.
在评论中有另一个观点
haitao 发表于2005-05-16 11:01 AM
CVS/VSS/SVN这些版本控制软件(工具、系统),感觉最直观、自然的还是VSS:项目、目录、文件x使用者x浏览、读、改、删、建,权限设置和项目的定位非常清晰唯一、也是致命的缺陷是需要通过windows的共享目录来实现(1、要求所以用户都有服务器的用户帐号,2、对服务器的数据库目录的权限都是一样的高)

而CVS的使用思路一直觉得对不上,SVN好像好了一点,但是还是没有对上。

我对版本管理的思路是:
项目负责人可以在系统里建一个项目,直接导入现有的代码、文档等目录、文件,然后按目录、文件指定那些成员对它有浏览、读、改、删、建的权限;之后,每个人登录进去后,首先可以看到自己被加到哪些项目了,进入每个参与的项目后,可以看到任何被允许浏览的目录,。。。每个人的帐号只是对这个系统有效,与这个系统所在的服务器的帐号没有任何关系(当然,这样可能有一个弊端:如果每个用户已经在服务器里有一个帐号了,他需要记两套帐号密码--如果能同步两套帐号密码,则可免除这个弊端)

我觉得任何一个作版本管理系统的人,首先有的基本需求模型应该就是这样的,不知道CVS/VSN为什么会做成这个样子?



update:
又仔细看了一遍,才知道分支合并时,要避免重复合并,真是一件不容易的事情。
* 如果确定了分支只是偶尔使用,那么应当将分支定期合并回主干。合并时选择分支的两个版本 diff,在主干中记录 log
* 如果确定了分支是长期的,那么应当将主干定期合并到分支。合并时选择主干的两个版本 diff,在分支中记录 log。

最终,当分支不再需要,可以合并到主干时,前一种情况容易处理,后一种情况必须比较分支和主干的两个 HEAD 版本。如果只希望合并一些特性,不合并另一些特性,那么要想在后续合并时避免重复合并几乎是不可能的。如果出现了某种情况,例如严重的安全问题,必须将某个小修改同时应用到多个分支中,又不愿完整地合并所有特性,那么后续合并时会头痛死的。

我们的代码之所以出现 patch 和 release 的混淆,是因为把两种情况合并考虑,而 vss 又没有提供好用的 tag 和 merge 操作。手工完成 copy 新分支和备份,也许是现有条件的最好做法。

阿汤跳到的公司竟然是用 svn 的,不知道它们遇到这样的问题怎么做。



update:
今天看到的帖子说,fedora 计划采用与 Ubuntu 一样的 bazaar 系统,来维护代码..
http://www.advogato.org/person/badger/diary.html?start=40
http://www.fedoraproject.org/wiki/Infrastructure/VersionControl
Tags: