【问题标题】:Couldn't get files under specific revision on SVN无法在 SVN 上获取特定版本下的文件
【发布时间】:2013-01-14 04:08:35
【问题描述】:

我的项目使用SVNKit 以编程方式从一个(repo A) 签出文件并签入另一个(repo B)

repo A 中的所有文件均已被 Eclipse 提前签入。

用户在repo A上指定特定版本下的特定文件,程序会将其从repo A复制到repo B

它大部分时间都可以正常工作,但在以下情况下会失败:

例如:

  1. 一开始,我签入文件,例如:InfoStruc.java,到repo A,它返回给我修订号(例如:61)

  2. 用户在修订版 2 上选择 InfoStruc.java 进行传输。 (事实上​​,1~60 的任何修订都失败了)

返回以下错误信息

org.tmatesoft.svn.core.SVNException: svn: E160013: '/svntest/arthur/!svn/bc/2/DPS/src/main/java/idv/arthur/work/InfoStruc.java' 路径不找到:404 未找到 (http://10.134.231.56)

经过多次repo A的承诺,InfoStruc.java的修订增加到946。 从1~60 修改它仍然会出错,但在61~946 上工作正常。

我的 subversion 服务器的版本是1.6.11。 SVNKit 是1.7.8

【问题讨论】:

  • 我不明白。一个文件最初是在修订版 61 中创建的,您对从修订版 2 中检索此文件失败感到惊讶吗?
  • 是的,我一共提交了两次这个文件,第一次是61,第二次是946,但是我可以选择(61~946)之间的所有版本。所以我想我应该也可以选择(1~60)。

标签: svn svnkit


【解决方案1】:

这是“按设计工作”。如果 repo 中的 file 是在修订版 61 中创建的,则可以参考 repo@60 并且可以参考 repo/file@61 但不能参考 repo/file@60,因为正如错误消息所示,它指的是在那个版本中不存在。这与尝试引用不存在的文件在概念上并没有完全不同。

【讨论】:

  • 为什么SVN 没有像在 62~945 上那样完成 1~60 的缺席?有什么方法(通过 API)来区分哪个版本是开始版本?当我在SVNDirEntry 中调用getRevision 方法时,它总是返回最大版本,可能会导致用户选择不存在的版本。
  • 如果文件是在61版本创建的,那么在62版本中肯定还存在,所以你可以参考一下。也许您的“修订”模型与 SVN 不同?修订意味着“这是项目在特定时间点的样子”。您可以参考项目中的任何人工制品;如果它自 61 版以来没有改变,那么你得到的是它在 61 版中的样子,仅仅是因为它在你所指的版本中仍然是正确的。修订版 61 之前的真相是“文件不存在”。
  • 感谢您的解释。我想我明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 2018-08-03
相关资源
最近更新 更多