Subversion的合并跟踪早期接受程序

Filed Under (General) by rocksun on 30-05-2007

Subversion1.5会在这个夏天出现,会包含很多令人期待的合并跟踪功能,Auke已经为此写了一些东西:

CollabNet希望通过提供合并跟踪早期接受程序(Merge Tracking Early Adopter Program)来支持这个重要的开发,这个程序的目的是辅助Subversion提交者进行测试,来收集改进请求并能较早使用这个特性,以便为将来做好计划。

这个程序在http://merge-tracking.open.collab.net,这里你可以看到合并跟踪(如设计规格)的相关文档,beta版本程序,有内置合并跟踪历史的测试版本库,也有一个讨论Subversion 1.5和合并跟踪的论坛。

我们正在寻找许多用户来参加并活动,这样这个程序才能为开发做出贡献。如果你选择加入我们,你需要乐于下载并安装这个软件,并且花费大量的时间测试和检查合并跟踪功能,而且要参与到讨论中来(特别是bug报告)。

这个项目会支持Subversion开源项目,我们会与他们的普通流程关联。潜在的缺陷会在论坛讨论,如果确实是问题,我们会将其反馈给Subversion开发者,将其记录到问题数据库或发送邮件到dev@。当然,所有的讨论都是公开的,我们与提交者紧密联系,并让他们在几周前知道了这个程序,

如果合并跟踪对你来说很重要,请加入早期接受程序,与其他openCollabNet 成员一起来帮助Subversion开发团队将合并跟踪特性功能做的更加稳定。

http://merge-tracking.open.collab.net

Guido Haarmans is Director Developer Relations at CollabNet, he works on openCollabNet and CollabNet Subversion product marketing.
Technorati : , , , , , ,

Subversion binaries社区项目

Filed Under (General) by rocksun on 25-05-2007

Subversion项目对于发布新版本非常活跃,但没有官方的签署或维护任何Subversion软件的二进制包,相反,你可以从包括CollabNet的 志愿者那里下载二进制文件,志愿者系统的好处是Subversion可以存在于许多平台,但坏处是某些平台会没有Subversion,而有些平台同步的会很慢。

在6月1日,我们在openCollabNet开始了一个新的社区项目: SVNbinaries。这个项目的目标是创建广泛平台的二进制程序,保证持续的社区支持,而不仅仅是个体的支持,除了创建Subversion二进制构建脚本外,我们还会保证许多语言绑定的下载。

我们知道很多人已经提供了二进制的下载,但我们的目的不是和他们竞争,全球Subversion社区的好居民对我们很重要,这个项目不仅是一个下载Subversion二进制的地方,我们很高兴你发现的其他下载点。我们的目标是创建一个社区可以改进构建脚本,并且在稳定基础上保证广泛的二进制和绑定。实际上,我们已经很热情的欢迎了那些曾经提供二进制下载的人们加盟,来改进构建脚本,保证绑定的可用和不同的属地下载。

我们在寻找哪些特别的二进制和绑定?社区将会驱使这些工作。有些人会在得到要求时去跟进,如果需求在Subversion社区是非常普遍的,我们会找人去完成,CollabNet 会播下这样的种子,Jeremy将会贡献他最近创建的Mac OS X客户端二进制程序

社区并不是建立在许多分享规则上的,社区将会随着时间创建自己的规则。我们模仿开源世界的惯例开始一个简单的流程模型:你贡献一些事,另一些人验证它,如果好,你会成为活动的参与者,然后你会成为完全的或部分的项目提交者。

如果你希望贡献你的二进制代码和编译脚本来改进人们的工作,你可以给我们发送邮件,你可以在http://svnbinaries.open.collab.net找到项目,我们会在6月1日正式开始。

Jeremy Whitlock, Mark Phippard and Guido Haarmans


Guido Haarmans is Director Developer Relations at CollabNet, he works on openCollabNet and CollabNet Subversion product marketing.

代的问题

Filed Under (Subversion in the Enterprise) by rocksun on 24-05-2007

我必须承认我对于blog非常陌生,这段文字首先使用纯文本编写 - 是的,我在职业生涯是一个早期的COBOL开发者,我习惯了使用大写来写很多东西。

当我在1996年来到了叫做Atria Software的小公司以后,软件开发的世界发生了很大的改变:那时候都是小的中型团队,通常是围绕某个确定的项目服务器。现在的宽带比那时候的局域网还要快了很多,不同的站点使用GB带宽的线路连接?而那时,如果你幸运的话才可以使用双倍的ISDN拨号连接。

在那些日子里,公司需要组织分布试的团队在非常复杂的项目里工作,所以他们需要一个基础框架来支持这些。大多数商业SCM系统是复制和版本库的同步,你复制存档,反复的在不同站点指出变化,你们交换这些变化,并应用到不同的备份上 - 很好!这个方法最大的优势在较小的带宽下也能使用,但缺点是:改变和同步之间的横沟产生的冲突。如果一个对象在两个站点被修改,需要在同步时解决潜在的冲突,你会强调可以通过主人的概念来避免同时的修改,你是对的,但是这意味着你不是因为项目需要而引入了分支,而仅仅是因为复制。

现代的方法企图解决这种挑战,例如Raid系统可以技术读。如果你提交了一个修改到存档,修改会立刻传播到其他备份,没有任何主人身份的定义,这种时间差距的减少消除了大多数风险 - 就像有一个中央的存档!

但是仅仅是”大多数”而已。首先,如果连接中断时冲突的风险就会重新上升,第二,它减少了组织对于变更反应的灵活性,因为基础设施的设置反映了现状(如果你曾经在不同站点移动过复制品,你明白我的意思…)。第三,它让知识产权(Intellectual Property)管理更加复杂,我知道一个ClearCase在28(!)个站点复制,大多数只有读权限,想象一下建立相同级别安全来防止未授权用户访问所有站点的代价?

对于集中式的SCM,一个常见的争论是如果你(或你的站点)离线时,你需要的数据不在你的工作拷贝时怎么办?好的,现在的世界恐怕没有必要离线(现在你甚至可以在飞机上在线);科技如此让这样做的代价很低,你不必再使用复杂的分支策略。而且如果你希望将你的工作与其他团队成员分离一段时间,Subversion(或一个嵌入的Subversion)允许你这样做。

不要让我犯错,还是有一些复制的场景,如一个极限数据卷。然后,也只有然后,它是正确的方法。但是让它作为你应对分布试开发的银弹吧,这样做,因为你一直这样做。

我必须承认,我已经公正的分享了我的在组织中复制的概念,但是 - 复制作为一个支持分布式团队的SCM概念,有着15年的历史;在我们的市场里,这几乎是第2代科技,是时间尝试新的,也许并不是那样新的东西,因为大型机已经在5代里使用了它…

This is posted by an excited NKOTB (New Kid on the Blog) coming from the pre-internet generation.


通用Mac OS X Subversion Binaries可以下载了

Filed Under (Client Tools) by rocksun on 15-05-2007

6月16日添加:现在我们有了Mac OS X的Subversion 1.4.4程序,Jeremy’s blog post.


你爱Subversion,而且你爱Mac。但是你如何得到你的命令行客户端?我也有这样的问题,但是我很高兴得宣布一个针对Mac OS X操作系统的新的Subversion 1.4.3 binary可以下载了,在接下来的几周里,它将会成为一个新社区项目的一部分,这个项目的目标就是为许多操作系统提供最及时的Subversion二进制下载,在项目启动时我们会blog记述,但在之前我们可以先看看Mac OS X的二进制。

新的OS X二进制程序是完全的Subversion 1.4.3命令行安装,使用Mac的图形化安装器,你可以在任何10.4.x OS X操作系统上安装,这个二进制是通用的,所以它可以在Intel和PPC上运行,这个二进制包含Subversion可执行程序和所有必要的/依赖的头和共享库。这意味着你可以针对库变异其他应用程序,例如你可以为新装的Subversion编译Apache,从而提供一个网络层,这个包也包括了JavaHL绑定,所以你可以在Java应用里使用本地Subversion,例如流行的Eclipse插件 Subclipse

Subversion二进制是完全功能的,这只是一个开始。随着社区项目对于创建二进制的需求,我们会提供更多的绑定,更好的包,可能的话还有Mac OS X的服务器,一切都是可能,我们的社区会守护着未来。更多关于这个社区的消息很快就会到来。

Jeremy is an open source advocate and is currently one of the lead Subversion consultants at CollabNet. In his spare time, he contributes to many open source projects, plays many video games and still continues to be amazed at the personal growth of his two year old son.

合并跟踪介绍

Filed Under (Subversion in the Enterprise) by rocksun on 11-05-2007

所有的分支模式需要考虑合并,此刻,Subversion使用了合并,但是没有将其记录在历史信息中,这是指Subversion没有自动记录或跟踪合并了哪些变更集或合并产生了哪些修订版本,在缺乏合并跟踪的工作中,目前的最佳实践是将合并信息记录在日志信息中。

合并跟踪是一个多方面的功能,并没有一个广泛认可的定义存在。大多数用户和组织容易只考虑他们开发组织中对应特定问题的子集,合并跟踪的普通特性包括记录各个分支上存在的变更集,防止重复合并,处理目录对应的合并,支持手工记录跟踪信息,防止特定修改集扩散,还有各种报告功能。

一年多以前,Subversion项目开始确立,设计和实现合并跟踪,CollabNet为开源项目收集了企业需求,在2006年2月,我们成立了一个工作组,请客户和Subversion开发团队一起确立了需要的goneng 。Subversion团队采纳了这些需求,并且确立的定义,涉及和实现。CollabNet雇员继续在合并跟踪相关的开发特性和跟踪打开问题上发挥关键作用。

Subversion的合并跟踪需求,功能规格,设计文档那个和当前的项目状态可以在Subversion项目的merge tracking pages看到。

在我的下一篇文章中,我会总揽一下Subversion团队将要在1.5版本中发布的功能。


Technorati : , , , , , , ,

1.5中的合并跟踪

Filed Under (Subversion in the Enterprise) by rocksun on 11-05-2007

就像我在以前提到的,Subversion项目通过开源社区和CollabNet 客户的商业数据反馈确定了许多需求,这些需求以及对应的功能和设计都可以在Subversion项目网站上看到。

Subversion即将发布的1.5版本预计将包含核心的合并跟踪特性,并将在以后的版本扩展这个功能。所有的合并跟踪功能的基础是自动记录拷贝、合并的变更集内容和位置的功能。在此之上,1.5将会包含下面的功能。

  • 重复合并

最常见的关于合并跟踪的方法是重复合并。这个需求是跟踪变更集曾经应用到何处,所以用户可以重复的将分支A合并到B,而不必记住最后拷贝的修订版本,它也会纪录跟踪用户cherry picking(优选的)变更集,Subversion不会意外的合并已经应用的变更集。

  • Cherry Picking

Cherry picking指的是将一个或多个修改从分支A合并到分支B(与合并所有的未合并变更不同),Subversion会提供指明合并到分支B的变动的方法,这样的合并必须支持多个不同的方向,例如如果一个发布分支B是通过trunk的拷贝得到,则分支B上的任何修改会转移trunk,同时trunk上的修改也会转移到分支B,而不会产生合并跟踪算法的混淆。

  • 记录的手工合并

记录手工的合并允许在不使用’svn merge’ 子命令创建目标修订版本的情况下将变更集标记为合并的,这通常用在没有对应文件类型的合并工具时,或者用户手工合并的情形。当然,它必须支持在处理合并跟踪的变更集时比使用’svn merge’传递的分支时更有效。

需要这种功能的实例场景包括(a) 你希望应用到分支的实际更改源分支的化身没有交迭,但概念上等价。(b)只有变更集的子集 (c)分支内容差别过大,应用自动合并几乎不可能(例如,会产生大量合并冲突)。

  • 合并回退

能够回退合并和/或相关跟踪元数据,无论是一个自动或手工的合并。

  • Block/Unblock变更集

Subversion可以保护修订版本免遭…

  • 自动合并

Subversion具备自动合并的能力,并且支持处理冲突和其它错误的接口。




, , , , , , , , , , ,

详细的日志信息有必要吗?

Filed Under (General) by rocksun on 04-05-2007

Subversion开源项目赢得了很好的声誉,这不仅是因为紧密关注它的过程,而且是因为这是一个甜蜜的地方,它会尽可能从其贡献者那里得到收获,而不会用麻烦的规则和纪律让他们灰心。这个项目有一些简单日志信息内容和格式的指南,这个指南(可以在http://subversion.tigris.org/hacking.html#log-messages看到)在繁杂Subversion过程文档中,他们需要单个功能(或对象)粒度的修改记录。

为什么?为什么不只使用一个指向问题跟踪记录,或完全记录修改背景的历史归档邮件列表的链接呢?这是因为Subversion社区中CVS时代的老不死习惯呢,还是有其他好处?

最近我被问到了这些问题,所以我尝试回答这些问题。

我敢说大多数人不希望在查找期望的信息时切换工具,为什么开发者要启动web浏览器并连接问题跟踪工具,也许这些页面包含几百个注释–有一些是有价值的,而有些仅仅是有人说”Yeah, I want this bug fixed, too”–所有的只是指出了特定功能改变的历史?为什么一个用户需要从版本控制历史中挖掘一个bug是否被修正或者某个特性是否被添加,而且试图从日志信息和分支名称中猜测比较象的发布,这样做能看到希望吗?

他们不应该,你应该看到,两种工具有不同的目的,他们是互相补充,但是有意的读者完全不同。

版本控制系统只关于代码,开发者生活在版本控制中,没有版本控制来编写软件就像…好的,我听说这样非常不好,但是用户经常会意识不到版本控制的存在,他们会非常高兴的从一个发布包到另一个发布包,而不会考虑其保存在版本控制系统中的区别,用户生活在问题跟踪工具中。

一个问题跟踪工具会在很高的级别处理缺陷或特性,用户不会关心在文件srcfile.c中的doit()需要在823行进行修改,来修正调用doit_helper()私有方法的错误处理逻辑。他们只希望知道bug已经消失,是在哪个版本修正。在另一方面,开发者希望知道 — 需要知道 — 所有细节,包括这个修订版本修改的哪些函数或类?这个方法或类在哪些修订版本中修改了?怎样的修改?不幸的是,在问题跟踪工具中保存此类信息不是一个最好的办法。

我和其它几位开发者知道将ChangeLog文件保存在工作拷贝的顶级目录,通过svn log -v(一些项目甚至将ChangeLog文件纳入版本控制,而那是CVS的回归)的输出生成。我们为什么要有这些问题建?因为我经常要回答类似的问题,”哪些修订版本srcfile.c有更改?为什么?哪些修订版本动了doit()?一样的,为什么?“如果我需要同时使用版本控制和问题追踪工具收集这些问题–特别是如果追踪工具不支持命令行方式的访问–同时包含可读–和机器可解析的输出–我和许多开发者会变成瘸子。

然而,因为ChangeLog确实有用,我可以查找方法名或类标注的修改。不幸的是,大多数版本控制工具不会理解它们存放文件的内容,你可以通过diff工具察看文本文件之间每一行的差别,但是版本控制工具本身不会知道函数之间的区别。那就是为什么需要记录工具会报告给你的细节水平的信息,例如在修订日志信息。很自然,如果日志信息有此种程度的细节,你希望可视化的安排它,这样修改可以根据路径分组,而且通过结合你的格式,你的脚本可以被解析和报告。所以普遍的开发者需求和广泛实践的活动驱使Subversion社区领导要求格式良好的日志信息,就像项目过程文档中描述的那种。

当然,也有些遗留的原因,比如一些日志信息的细节习惯。一些人通过一些特定的文本格式来定位问题跟踪工具或贡献者信息,这样做为辅助记器解析,跨工具集成和报告带来了很大的方便。Subversion对于自定义修订版本属性的支持鼓励我们使用自定义属性(例如myproject:issue-idsmyproject:contributors)来保存这些信息,这将会大大简化对这类数据提交后的处理,我相信TortoiseSVN实际上已经利用这些特性。我想有两件事情会让这些事情成为日常的惯例,首先Subversion会允许我们在提交时设置任意的修订版本属性(幸运的是,Subversion1.5将会发生。我是怎么知道的?一个合适的工具告诉的我)。第二,Subversion需要支持更好的客户端交互,用来查找这些属性。

下面是我偶尔生成变更日志文件的脚本,它能知道当前工作目录所在Subversion版本库URL的基础名,如果你有一个trunk的工作拷贝,它会生成包含trunk和所有branches日志信息的变更日志文件,否则它会产生你所在版本化目录的日志数据。它只会在你的版本库遵循使用根路径包含trunk、tags和branches的最佳实践时才有效,但是我工作的项目都是遵循这种习惯。显然,这个脚本没有什么魔力,我可以仅仅使用svn log就可以得到一些信息,但是我经常会在没有网络连接的时候工作,所以对我来说有修订版本日志信息的缓存会很方便,不管怎么样,这是脚本:

#!/bin/sh

if [ ! -d ".svn" ] ; then
echo "ERROR: Not in a Subversion working copy" 1>&2
exit 1
fi

LOGFILE=./ChangeLog
TRUNK=`svn info | grep "URL" | tail -c 6`
if [ ${TRUNK} = "trunk" ] ; then
URL=`svn info | grep "Repository Root" | cut -c18-`
echo "Generating ChangeLog for ${URL} (trunk, branches)"
svn log -v ${URL} trunk branches > ${LOGFILE}
else
URL=`svn info | grep "URL" | cut -c6-`
echo "Generating ChangeLog for ${URL}"
svn log -v .@HEAD > ${LOGFILE}
fi

C. Michael (Mike) Pilato has been on the Subversion project as a committer since 2000. Mike is one of the co-authors of “Version Control with Subversion” and he is on the board of the non-profit Subversion Corporation.


Technorati : , , , , , , , , , ,