`
RednaxelaFX
  • 浏览: 3038579 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

批量更新SVN版本库的脚本

    博客分类:
  • Ruby
阅读更多
我的老笔记本上有个目录专门用来放感兴趣的SVN版本库,像是IronRuby、Parrot、Ruby之类。版本库的数量不少,而我以前一直都是在浏览器里手工去点击每个版本库的目录去做更新。太费事了,不爽。
于是刚才想找办法让这过程更自动化一些。不过发觉TortoiseSVN在无干预命令行批处理方面还是不太适合(毕竟它是个GUI客户端),所以跑到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相关的东西放进来……所以懒得多写脚本了 ^ ^
分享到:
评论
1 楼 lwwin 2008-06-11  
哦,原来你是这个意思啊……
偶都忘了可以这么玩=v=+++

相关推荐

    批量删除.svn脚本

    5. **SVN Delete**:在版本库中删除文件或目录,通常需要先`svn delete`,再`svn commit`。 6. **忽略文件**:如果不想让某些文件或目录受SVN控制,可以在`.svnignore`文件中添加相应的模式。 在实际工作中,我们...

    windows&linux svn自动化全备份&增量备份脚本

    【标题】:“Windows&Linux SVN自动化全备份&增量备份脚本” 在IT环境中,版本控制系统如Subversion(SVN)是团队协作开发的重要工具,它用于管理代码版本,跟踪文件和目录的更改。然而,为了确保数据的安全和可靠...

    svn批量更新

    批量更新SVN仓库中的文件通常在以下场景中非常实用:大型项目、多模块开发、或者需要同步多个独立但相关的代码库时。这样可以节省时间,避免逐个目录手动更新的繁琐过程。 以下是一些关于svn批量更新的知识点: 1....

    删除.svn脚本

    这个过程在团队协作中尤其重要,因为`.svn`目录包含的是个人工作空间的配置信息,而不是应该提交到版本库的内容。当共享代码仓库时,确保不包含这些目录可以减少冲突和不必要的混乱。 在实际应用中,你可能需要根据...

    批量清空SVN信息

    2. **隐藏的SVN文件和文件夹**:在SVN版本控制下的项目中,通常会包含一些隐藏的SVN元数据文件和文件夹,如`.svn`目录。这些文件包含了关于文件的状态、提交历史等信息,是版本控制的基础。 3. **为何要批量清空SVN...

    批量删除svn文件夹

    在执行任何批量删除操作之前,务必备份重要的版本库,以防万一。并且,最好先在一个测试环境中尝试批量删除,确保一切按预期运行。 8. **协同工作**: 如果团队中还有其他成员在进行开发,批量删除可能会影响他们...

    SVN快速授权脚本

    是指一组已配置好的权限配置文件和说明用于指导配置库的快速授权,应用权限模板的项目将会拥有相同的授权结构,根据版本管理工具不同授权模式分为Windows认证模式的授权模板和Subversion认证模式的授权模板两种。

    批量删除SVN文件.zip

    标题提到的"批量删除SVN文件",指的是我们不再需要某些文件或目录,并希望一次性从版本库中移除它们,而不是逐一进行操作。这个过程涉及到SVN的`delete`命令,但手动操作会非常耗时,特别是当需要删除大量文件时。 ...

    SVN版本控制清除工具

    总之,SVN版本控制系统提供了强大的文件管理和协同功能,而清理.SVN子目录则是为了特定目的,如节省空间或保护隐私。通过编写脚本或使用专用工具,可以轻松实现这一操作。但一定要谨慎,确保在删除前理解其可能带来...

    删除SVN版本控制文件批处理

    总结来说,删除SVN版本控制文件主要涉及识别和移除`.svn`目录,通过编写批处理脚本可以高效地完成这一任务。了解SVN工作副本的结构和批处理脚本的编写,对于日常的代码管理和维护工作具有实际意义。在实际工作中,...

    批量删除SVN

    批量删除SVN是指在项目工程中一次性移除多个文件或目录的SVN版本控制,这对于清理不再需要的旧版本或者重新组织代码仓库来说非常实用。下面我们将详细介绍批量删除SVN的操作步骤及相关知识点。 首先,了解SVN的基本...

    svn迁移脚本.rar

    5. **脚本的使用与调试**:使用脚本时,需要了解其运行环境,如操作系统、svn版本以及所需的权限。在执行前,先进行小规模的测试,以调试和优化脚本。一旦确认无误,即可应用于大规模的迁移任务。 6. **注意事项**...

    批量删除.SVN文件

    这些.SVN文件是SVN版本控制系统的一部分,存储了项目文件的版本信息和元数据。在某些情况下,用户可能需要清理这些文件,例如在备份、迁移或者整理项目文件时。 描述 "批量删除SVN文件,使用方法:拷贝到版本控制...

    SVN目录下.svn文件批量删除

    这些`.svn`文件夹对于SVN的正常运行至关重要,但有时可能因为某些原因需要进行批量删除,例如清理磁盘空间或者在不关心版本历史的情况下快速复制项目。 "SVN_Deleter"是一款专门设计用来批量删除指定目录下的`.svn`...

    svn下载的python接口函数库

    Python SVN接口库大大简化了与SVN的交互,使得开发者无需离开Python环境就能管理版本控制,这对于自动化脚本或集成开发环境(IDE)插件来说非常有用。在实际开发中,结合其他Python库,如`os`和`shutil`,可以实现更...

    批量删除项目中的SVN.rar

    然而,在某些情况下,例如项目转移、清理本地工作空间或更新到新的代码库时,可能需要批量删除项目中的SVN相关文件。本压缩包文件“批量删除项目中的SVN.rar”提供了这样的解决方案。 标题“批量删除项目中的SVN”...

    批处理SVN文件

    批处理SVN文件是一种在命令行环境中批量处理Subversion(简称SVN)版本控制系统操作的方法。SVN是一种广泛使用的版本控制系统,它允许用户跟踪和控制文件和目录的变化,便于多人协作开发。批处理则是在Windows操作...

    windows下将文件脱离svn管理

    3. **使用命令行工具**:通过 SVN 的命令行客户端 `svn remove` 或 `svn delete` 命令,可以批量删除文件或目录及其版本控制信息。例如,`svn delete foldername --keep-local` 命令会删除文件夹`foldername`的版本...

    删除SVN无用信息

    标题中的“删除SVN无用信息”指的是在使用Subversion(SVN)版本控制系统时,可能会在项目中积累一些无用或不再需要的SVN元数据,如版本库中的临时文件、日志、属性信息等。这些信息可能占用硬盘空间,同时也使版本...

    断开项目与SVN间的关联

    如果仅仅是临时断开连接,不进行迁移,那么项目就变为一个非版本化的本地项目,你可以自由地进行修改而不会触发SVN的更新。 总结来说,“断开项目与SVN间的关联”涉及的主要步骤包括查找并删除`.svn`文件夹,以及...

Global site tag (gtag.js) - Google Analytics