svn版本库浏览器_批量更新SVN版本库的脚本

SVN官网去下载了Subversion 1.4.6,安装。装好之后在命令行试了一下操作,没问题。

接下来就是如何自动化的问题了。我那些版本库不都是在同一嵌套层上的,有的深有的浅。例如说这样:

repository

+ IronRuby

* trunk

* Nemerle

+ Ruby

* Ruby_1_8

* trunk

星号标注的是要更新的目标。怎么办呢?只好递归搜索了。反正能找到带有".svn"目录的最上层目录就被认为是版本库目录,以它为标准来判断是不是要更新的目标;如果是目录但不是目标则遍历子目录来寻找目标。

于是简单的写了这样的Ruby脚本:

#!/usr/bin/ruby

def update_repo( path )

puts path

system "svn up \"#{path}\""

end

def locate_and_update( dir = "." )

entries = Dir.entries( dir ).reject do |item|

item =~ /^\.(?:\.|git|hg)?$/ # remove ".", "..", ".git", ".hg"

end

if entries.include? ".svn" # if this is a repo

update_repo dir # perform update

else # if this isn't a repo

entries.each do |e| # recursively search for repos

path = "#{dir}/#{e}"

locate_and_update path if File.directory? path

end

end

end

puts Time.now # show the time of update

locate_and_update # start from the working directory

把这个脚本放在我的repository目录里,它就能帮我更新整个目录里所有的SVN版本库。当然,递归搜索的效率不是太好——如果有任何一个目录里没有任何子目录是SVN版本库,这脚本恐怕要花上好长时间才能“知道”这点。要想快点的话可以改进上面的代码,让locate_and_update搜索一个内容是目录索引的配置文件,如果不存在的话就以深度优先搜索创建一个索引。那样就不用每次都对整个repository目录做全面搜索了。如果版本库的数量或者位置发生了改变,只要把那个索引文件删除它就应该重新生成索引,也不费事。

要完善的话还可以加点参数什么的,也可以做非交互式处理(传--non-interactive参数给svn)。不过上面的代码已经足够满足我自己的需求了,我的repository目录里全是SVN版本库,暂时没把git和Mercurial相关的东西放进来……所以懒得多写脚本了 ^ ^

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2008-06-11 07:56

浏览 3994

评论

1 楼

lwwin

2008-06-11

哦,原来你是这个意思啊……

偶都忘了可以这么玩=v=+++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值