Subversion 1.5中的稀疏目录

Filed Under (General) by rocksun on 28-06-2007

上一周我们blog了Subversion 1.5的合并跟踪特性,当然也有许多其他的新特性,让我们来看看有什么。

Subversion 1.5发布说明(当然还没有完稿)提到了如下1.5新特性:


  • Merge Tracking合并跟踪
  • 稀疏检出
  • 通过代理透明写WebDAV
  • ra_svn和svnserve对Cyrus SASL的支持
  • 拷贝/移动改进:peg修订版本,’svn mv file1 file2; svn mv file2 file3′, ’svn cp *.c dir’
  • 取消改进
  • 变更列表支持
  • FSFS sharding
  • 命令行客户端改进
  • JavaHL绑定改进
  • 许多改进的API

如果你对这个blog不是很熟悉,并且希望找一些关于合并跟踪的信息,可以看Merge Tracking Early Adopter Program,下面的几周我们会blog一些新的Subversion特性,也许不是所有的事情,如果其他人有介绍1.5,我们会链接进来。例如Malcolm Rowe的mod_dav_svn improvementstree-structured FSFS repositoriesbacking up FSFS repositories, Subversion 1.5 style.。

在本文,我们会介绍稀疏目录。

稀疏目录

当你第一次检出Subversion版本库,或版本库的一个目录,你会得到其中的所有内容,在一些大项目里,这可能会是一个问题,因为在网络上传递文件需要耗费时间,这与Subversion后来传递小的变更形成鲜明对比,另外,你希望所有文件将你的磁盘搞乱?

Subversion 1.5引入了稀疏目录,给你提供了控制检出和更新哪些内容的能力,你可以读这里的规格,但是我没有从阅读中获得什么,我需要实践,所以我们开始(但是需要留意SVN 1.5的特性还没有全部完成)。

我首先从 Merge Tracking Early Adopter Program 下载Subversion 1.5预发布程序,并创建了一个版本库。

  • 下载二进制程序(我的是Windows)。
  • 拷贝.exe和.dll files到c:\svn,并将c:\svn加入到%PATH%。
  • 在c:\svn创建版本库(svnadmin create repo)(版本库在c:\svn\repo),下载合并跟踪beta版本随带的版本库dump文件
  • 加载dumpfile(svnadmin load c:\svn\repo < c:\svn\mergetracking.dump)。
  • 创建工作拷贝的目录
  • 检出版本库(svn checkout file:///c:/svn/repo/trunk


trunk的主目录包含一个文件和一些子目录:

index.html
about
jobs
news
products
support

假定我是另一个开发者(假装工作在工作拷贝wc2),我不需要子目录,在目前版本的SVN,我可以用-N选项(即非递归)来只检出trunk的主目录,而没有子目录:

0_4

现在我有了trunk顶级目录以及其中的文件,但没有子目录,对于一个大的版本库,这会减少检出的时间,保持你的工作拷贝更加干净,后续的更新只会更新已经检出的目录,-N是你控制的方法。

SVN 1.5会更加灵活,通过-N选项将会多余,我们使用–depth选项代替它,根据规格,–depth的可能值有:

  • –depth=empty: 更新不会拉出任何不存在的文件或目录
  • –depth=files: 更新会拉出所有的文件,但不包括子目录
  • –depth=immediates: 更新会拉入所有不存在的文件或子目录;但子目录的设置为depth=empty。
  • –depth=infinity: 更新会拉入所有不存在的文件和目录,子目录的设置为depth=infinity,与目前的缺省更新行为方式相同。

现在我是wc3的第3个开发者,让我们使用–depth=empty检出:

0a_3

一个trunk目录添加到了wc3,就像.svn管理目录(换句话说:创建了一个真的工作拷贝),但是除此以外,trunk目录是空的。

让我们使用wc2添加一个文件(test1.txt)到版本库,根据规格,如果我运行svn update,wc3不会添加任何文件:

12_2

很好,如我们的预料:没有文件。

让我们在wc3创建一个文件,并且添加到(test2.txt),然后回到wc1,svn update做出了一些更改,也提交一个文件test3.txt,提交,现在更新wc3。

2_2

Test2.txt已经修改,但是test3.txt没有添加到wc3(记住:–depth=empty意味着svn update拉出已经存在文件或目录)。

现在我们试试–depth=files。

3_2

所有顶级目录的文件都回被拉入,但是没有子目录,当我在wc1将test4.txt和test5.txt添加到trunk,并添加一个包含目录的文件,然后提交。

4_2

当在wc4使用svn update时,会拉入test4.txt和test5.txt,而不会包含子目录及其中的文件。

此刻我有一个问题,假设我只希望有test4.txt,我可以只拉入test4.txt,而不必拉入test5.txt吗?Subversion 1.5支持吗?

4b_2

Nice!

很好!

让我们试一下–depth=immediates。我猜”immediates”的意思是”邻居”:如果你是和我在同一个目录的一个文件,你是一个邻居,如果你是我的目录的一个子目录,你也是一个邻居,但是如果你是一个子目录的文件或目录,那么你不是直接的邻居。我们来试一下。

我使用svn checkout file:///c:/svn/repo/trunk –depth=immediates创建了wc5

它会检查trunk中的文件,包含子目录而不包含子目录中的文件。然后,在wc1我们在trunk的最高级目录添加了test6.txt,以及一个包含test7.txt的子目录。

5_2

这个新文件在trunk的主目录,子目录已经进来了,但是子目录的文件没有,那个目录实际上使用了–depth=empty创建。

–depth的最后一种情况是”infinity”

svn checkout file:///c:/svn/repo/trunk –depth=infinity

这与使用svn checkout file:///c:/svn/repo/trunk相同,那还要它做什么?命令的一致性。–depth不仅仅应用到checkout,也应用到update,例如,如果你已经使用 –depth=empty检出了一个目录,你仍然可以通过update获取所有的东西:

svn update –depth=infinity

62_2

哎哟,好像不行。Merge Tacking Early Adopter Program的SVN 1.5 beta版本只有几周的大小,显然只会更新稍深一级的目录(我们会立刻更新beta)。


这在我的构建中执行正常:

6a_2

其他的方式也工作正常。我使用infinity 创建了wc7,然后使用wc1提交了一个文件以及一个包含文件的目录(你知道是如何操练的),更新wc7:

svn update -depth=immediates

包含了文件和子目录(直接的),但没有子目录中的文件。

系数目录也会影响一些其他的命令:

  • svn info会显示工作拷贝的深度
  • svn switch可以使用–depth选项,且会根据url使用你指定的深度更新工作拷贝
  • svn status只会报告深度depth指定的文件和目录,例如如果你创建一个包含文件的目录,则svn status –depth=immediates只会报告新目录(一个邻居),而没有子目录中的文件。
  • SVN帮助中说提交也可以使用 –depth,允许你,例如提交当前目录的文件:–depth=files。它还不能工作,这是一个缺陷。

让我们关注一下兼容性,Subversion客户端和服务器版本会是稀疏目录的一个问题,然而,我认识到Subversion 1.5版的客户端会足够聪明的指出忽略什么,换句话说,如果服务器是1.5版本以前的,将会爆所有的脏盘子交给客户端,而客户端回检测检出时需要哪些,稀疏目录的支持也会工作正常。

稀疏目录何时使用呢?对很多用户来说检出单个文件(使用-depth=empty,然后对单个文件update)很有用,我们使用Subversion来保存openCollabNet的HTML内容,页面分布在同一服务器的多个版本库(每个项目都有一个自己的版本库),对于一个版本库我通常会管理顶级目录,然后将子目录给其他人,例如保存需要下载的二进制文件,文档或其他东西。通过使用–depth=files检出版本库,将会得到我需要的,而不包括其他人在其他目录管理的文件。


琐事: 何时何地第一次讨论稀疏目录?这里有答案。

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


Technorati : , , , , , , , , ,

Subversion为IBM Rational ClearCase的连接器

Filed Under (Subversion in the Enterprise) by rocksun on 20-06-2007

在5月30日我们做了另一次”Subversion in the Enterprise Webinar(企业Subversion网络会议)“,有许多人询问了从ClearCase® 到Subversion的移植(Bob已经关于此问题发表过blog),例如:

“我为一个地方做合同开发,我经常发现一些习惯于ClearCase的人,只要在本地环境,就会工作的很好,有一个可以从ClearCase移入移出的工具吗?我们肯定Subversion的能力,但我们希望能够将主要发布版本送回到客户的ClearCase版本库”

有一个解决方案:你可以立刻从openCollabNet免费下载一个ClearCase <> Subversion connector

这个连接器同步IBM Rational ClearCase和Subversion工作拷贝的变更,它提供两种形式的数据同步:从ClearCase到Subversion,或相反。

从ClearCase到Subversion: 要想连接器在这种模式下工作,你需要两个ClearCase视图,来区分不同的修改:

  • “ClearCase Reference View”必须匹配Subversion工作拷贝。
  • “ClearCase Current View”包含对 ClearCase VOB的最新修改。

连接器得到ClearCase之间的区别 - Reference View与ClearCasw - 当前视图,使之与Subversion工作拷贝同步。

Export

当你导出时,将会发生如下事情:

  • 连接器会检测两个ClearCase的区别。
  • 删除的文件(红),添加的文件(蓝)和改名的文件(绿)将会导出到Subversion工作拷贝,并会直接提交到Subversion版本库。
  • 修改的文件(橙)只会更新工作拷贝,你需要手工提交到Subversion版本库来同步所有数据。

从Subversion到ClearCase: 在这个模式里,连接器将在Subversion工作拷贝中的修改带到你选择的ClearCase试图中。

Import

当你导入时,将会发生:Subversion工作拷贝中删除的文件(红),添加的文件(蓝),改名的文件(绿)和修改的文件(橙)会导入到ClearCase视图,你需要手工的将视图中的修改检入到ClearCase VOB。

连接器可以用于独立Subversion和CollabNet企业版,以及SourceForge企业版。如果你希望更多连接器的信息,下载它并读手册(上面的内容来自其中),为了得到连接器的社区支持,去openCollabNet的连接器项目,在CollabNet也有直接的支持

ClearCase连接器也有两个免费的HP Quality Center的连接器,我们的Subversion连接器允许你在Subversion中管理测试计划,而CollabNet企业版连接器可以双向的同步缺陷信息,来保证开发者和测试者对于同一数据的工作,你可以从我们公司站点下载所有的连接器信息。

原始链接

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

Subversion 1.5的合并审计

Filed Under (Client Tools, General, Subversion Client, Subversion Server, Subversion in the Enterprise) by rocksun on 13-06-2007

我们上周将Subversion合并跟踪特性提交到主干的过程很漂亮,Hyrum Wright是GoogleSummer of Code计划的一个学生参与者,他签约来提供合并跟踪的“Merge Auditing”特性,你可以在功能规格上看到一些细节,但实际上它是关于在svn log和blame输出中添加对于合并跟踪信息的智能和意识,在合并跟踪计划中,这是1.5之后的特性,它是任何人希望在码基中看到的特性,但是我们感觉版本的发布和核心功能的优先级更高。

不管怎样,在这种情况下我们可以手到擒来了,Hyrum,我应该将其添加为完全提交者,他在svn log中支持这个功能做出伟大的进展,并且已经将这些修改提交到了trunk,此外,我们为合并跟踪早期采纳程序创建的样例版本库已经帮我们完成了这个特性的操作指南,因此我们有一个文档完好的样例版本库,以及匹配的图像,Hyrum可以用来饮用,它可以帮助他精炼这个特性并使之工作正确。

Sample Repo

上面的图像是我们样例版本库的历史,如果你仔细观察,你会发现r14对于trunk的提交是这个特性发生作用的有趣实例,这个提交从分支合并而来,这个合并包含了另一个分支的附加合并,如果我运行这个命令(注意新的-g 选项):

svn log -g -r 14 $REPOS/trunk

Here is the new output:

------------------------------------------------------------------------
r14 | merger | 2007-05-30 15:48:11 -0400 (Wed, 30 May 2007) | 3 lines

Merge branch b - product roadmap and update about page

Command executed: svn merge $REPOS/branches/b
————————————————————————
r13 | buser | 2007-05-30 15:46:48 -0400 (Wed, 30 May 2007) | 1 line
Result of a merge from: r14

Update info about our company
————————————————————————
r12 | merger | 2007-05-30 15:45:19 -0400 (Wed, 30 May 2007) | 3 lines
Result of a merge from: r14

Merge branch a - product roadmap

Command executed: svn merge $REPOS/branches/a
————————————————————————
r11 | auser | 2007-05-30 15:43:00 -0400 (Wed, 30 May 2007) | 1 line
Result of a merge from: r14, r12

Add product roadmap
————————————————————————


需要注意它是如何包含修订版本r14的合并信息,此外,那些修订版本如何使另一个合并的结果。图形客户端,例如我们的CollabNet Desktop - Eclipse EditionTortoiseSVN一定可以在他们的UI中显示有用且有趣的图像。

这是Hyrum梦幻作品,继续努力,我已经等不及看到blame的实现了。

Mark Phippard is Director, Subversion Engineering at CollabNet. He works on the CollabNet Subversion team and is a project owner for the Subclipse project as well as a partial committer for Subversion.


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

Universal Subversion Binary Gets Updated and Upgraded

Filed Under (General) by rocksun on 11-06-2007

当我一个月前第一次宣布通用OS X Subversion程序,没有想到这个程序会如此高的点击(四周内有2700次),当然,Subversion是卓越的源程序管理系统,而Mac是杀手平台,但是知道这些没有让我对结果有任何准备。所以事情怎样才能变得更好呢?

好的……我们将程序升级到了Subversion 1.4.4作为开始,而且只是开始。最新的程序包含支持Apache 2.2.x的Subversion Apache模块,以及Subversion开发者维护的所有Subversion语言绑定,这包含了Java, Perl,Python和Ruby的绑定,1.4.4发布版本包含了端用户所需的所有程序,包括开发Subversion相关的应用,甚至Subversion的安装,没有遗留任何东西。

另外一些事情就是一个用来协调和投入Subversion的发布的openCollabNet的新项目已经正在进行,openCollabNet的SVNbinaries项目可以为整个Subversion社区提供构建和发布Subversion相关程序提供支持,Mac OS X 通用Subversion程序就是这个项目的第一个产品,这个项目的目的是允许社区成员提供二进制成和重建这些二进制的信息,从而其他用户可以改进这些方法。

我建立这个项目的目的不仅仅为了存放通用Subversion程序,也是为了你可以在项目里能够提交bugs,特性需求,新二进制程序,以及资源相关的开发和分发。SVNbinaries是真实的社区项目,唯一的目的是在混乱中让Subversion的安装更简单。

原始链接

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.


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

SCM Forrester Wave™ 报告中Subversion成为单独SCM的独立领先者

Filed Under (General) by rocksun on 07-06-2007

我经常同一些大公司的开发者谈论他们的领导采用的开发者和管理员不喜欢的版本控制工具,遗留系统太难使用,不太适合分布式开发,部署很困难而且代价太大。于是一些开发者开始为他们的团队和部门实现他们自己的Subversion服务器,开发的CIO和VP发现整个公司都这样做,开始惊愕该如何做:继续强制一个不怎么工作的系统还是去使用Subversion?在那些发生以前,他需要确信Subversion是可伸缩的,安全的,并且已经准备应用到企业,他们也需要不仅仅是他们自己人的确认;他们再看其他公司是如何做的,整个业界是如何做的,外部专家是如何说的。

如果你是这样一个人,正在为公司寻找使用Subversion替代遗留系统的人,下面是一个很好的帮助:Forrester刚刚发布了一个报告”The Forrester Wave™: Software Change and Configuration Management, Q2 2007″,其中引证了Subversion已经成为独立SCM的唯一领先。

这些事情工作的方法,实际上我没有被允许在blog中引用太多报告,我猜Forrester是希望你去读实际的报告,而不会有人断章取义,为了公平,他们做的很努力,客观性非常重要,如果你希望读这份独立报告,你可以从我们的网站得到一份拷贝

有一些事情我可以在这里与大家分享,例如:The Forrester Wave™是Forrester在市场上调查的图形展示,就像你看到的,单独SCM Subversion是独立的领导者。

Forrester Wave Report


我也可以分享Carey Schwaber对Subversion的描述,Schwaber先生是Forrester Research的高级分析师,他的研究领域是应用开发,特别关注SCM工具:

Subversion的力量是可伸缩性,可管理性和地域分布性。Subversion的应对企业需要的能力已经建立起来,单个实例可以管理7,500个用户…Subversion也非常易于实现和管理:Subversion客户的初始实现时间不超过一个月,管理员与用户比列好于 1:1,000″。

如果你需要让你的管理层确认Subversion已经为你的公司准备好了,你可以让他们访问http://www.collab.net/forrester_wave_report

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


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

建一座房子

Filed Under (Subversion in the Enterprise) by rocksun on 01-06-2007

一个月以前,我发表了一篇blog来建议企业更多的考虑采纳一些生产Subversion的过程(一个好的开源过程的例子):除了代码以外。这引起了一些有趣的讨论,离线的比在线的更多,所以我希望重新讨论这个主题。

我发现这很让人失望,如果不是吃惊,那就是企业对于考虑更少的约束是这样的沉默,但是Subversion项目仍然采用了一些过程驱动的配置管理过程。当我讨论开源过程时,我会得到许多反斜杠开头,事实上,反斜杠并不是来自知道,而是来自不可知的印象。这样想一个组织非常有趣,它会依赖于开源技术(例如Apache,Linux,Subversion等等),但是会未经任何考虑就拒绝制作这种技术的过程。这就像说”我爱我的房间,我发现它的质量很高,但是我不会使用相同的方法再建一个”,对于成功的主意和过程老的好的剽窃发生了什么?


例如,可见性看起来是更高质量的明显方法,应该被我们的过程应用。首先,一个人必须对于他的工作更加小心,因为他知道他的工作会可能被广泛的团队项目看到,这会强烈的威慑对于项目(或企业)确认的编码规范的削减。第二,代码因为更多眼睛的检视而获益,意味着很多对于企业代价很大的问题可以在生命周期的早期被发现,我认识到一些人对于将他们的代码暴露很沉默,但是对作正确的事情并不是一个抑制。大多数希望做点事情的人们希望以更细的层次那个分享他们的光辉。这种可见性是通过一定层次的泛读实现,但是也通过发送变更到邮件列表和相关的存档。可见性也可以通过关联修改和变更请求来加强。

如果能实现可见性,就很自然的要考虑对于其他过程的影响。如果他的团队会看到它的违规,谁会一直违反认可的过程呢?整个团队会如何对违规做出反应?人们被雇用不是被期待为整个团队做正确的事?不会,更扩展一点,为了整个团队?

与实现一个可以反映每个人生产率的钩子形成鲜明对照,当关注忠诚,可以是一些用户一直需要修正他们的行为。每个用户为每次操作付出一些代价,可能是会违反过程,当然,因为我们在讨论版本控制(也叫做时间及其),如果发生违规,修改可以回退。考虑事实上这样不会孤立某种类型的违规,而会重复许多不同类型的,将会影响每一个人。

我想企业需要更加的开放,考虑与现在使用的过程强制方法相比Subversion项目的方法带来的好处,因为你已经在Subversion(Apache,Linux等等)基础上建房了,有理由去使用同样的方法再建另一座房子。

Bob works (> 5 years) for CollabNet Services, Marketing or whomever needs an opinion. He has been focused on the delivery of version control and SCM for more than 10 years with the last three making people successful with Subversion. He helps CollabNet identify what our engineers should focus on with the Subversion open source project based on his experience, customer feedback, and his own prejudices.

Permalink


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