当前位置:  开发笔记 > 运维 > 正文

Subversion更新外部日期

如何解决《Subversion更新外部日期》经验,为你挑选了2个好方法。

我正在开发一个SVN控制下的大型项目.代码库的许多部分都被检查为外部,但正在被其他人积极处理.
我想更新我的整个工作副本,外部和所有,以便它反映了特定时间点的各种存储库的HEAD.我最初的尝试是:

svn up -r'{20090324}'

这会将当前目录更新为指定日期,但会将所有外部更新为当前日期.一次更新一个外部组件按预期工作.
我理解,由于外部的性质,单个更新无法使用修订号,但为什么它不适用于日期?
什么是实现我正在寻找的时间点效果的最佳方法,而不必维护一个硬编码各种外部的脚本?

我正在运行Linux系统.



1> Dave Cohen..:

这是低效的,因为它比(通常)需要更频繁地调用svn更新.否则,它很短暂的甜蜜:

Unix的:

find . -name .svn -execdir svn update -r {2010-08-30} \;

视窗:

forfiles /m .svn /s /c "cmd /c svn up -r {2010-08-30}"


这不会触及单个文件的外部 - 它们将保留在最新版本中

2> Brian Campbe..:

使用svn:externals时,使用没有修订号的外部通常是个坏主意.这意味着很难将外部版本与包含项目的版本相关联; 我知道这很困难,从试图在包含外部的项目中追踪一些历史记录,我将不得不猜测哪个修订版与包含项目中的修订版相对应(有时它更早,因为有人更新了外部项目和然后更新了包含项目,有时后来因为某人直接在外部结帐中编辑了文件然后提交了它.

相反,正如提示框中提到的一些段落到subversion书中的externals部分,你应该总是提交带有修订号的外部.这样,每当您签出包含项目的特定修订版时,也会检出外部的相应修订版.它确实意味着更多的工作,因为你必须每次都更新svn:externals属性中的修订号(我们编写了一个自动执行的脚本),但从长远来看,这是一个更好的解决方案.

编辑:这是我们使用的脚本的骨架(一个rake任务),用于方便地更新外部并保持所有内容同步.

desc 'Update external for this project (rake update_external r=17789)'
task :update_external do |t|
  rev = ENV['r']
  rev =~ /^\d+$/ or raise "Invalid SVN revision number: r=<#{rev}>"

  # Update the project.
  sh "svn update"

  URL = 'svn+ssh://example.com/external/trunk'
  sh "svn propset svn:externals 'external -r#{rev} #{URL}' containing/directory"

  # Update again -- to put the externals back to the right revision.
  sh "svn update"
end

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有