【发布时间】:2014-05-14 05:30:33
【问题描述】:
我目前正在尝试获取所有 SVN 修订版,然后依次检查它们并对其进行处理。
有
svn checkout http://hamcrest.googlecode.com/svn/trunk/ hamcrest-read-only
(使用 SVN 1.8.8)我得到了代码(我只是以 hamcrest 为例)。
得到它后,我正在尝试执行以下操作:
FSRepositoryFactory.setup();
SVNURL localRepo = FSRepositoryFactory.createLocalRepository(f, true,
true);
System.out.println("Repo: " + localRepo);
SVNRepository repo = FSRepositoryFactory.create(localRepo);
log.info("Revisions: " + repo.getLatestRevision() + " Path: "
+ f.getAbsolutePath());
List<SVNLogEntry> col = (List<SVNLogEntry>) repo.log(
new String[] { "" }, null, 0, repo.getLatestRevision(), true,
true);
for (Object o : col) {
System.out.println("O: " + o + " " + o.getClass());
}
System.out.println("Col: " + col.getClass());
不幸的是,这会创建一个空存储库,并删除其中的所有内容。这对应于 FSRepositoryFactory.create 的文档。
所以我搜索了另一种打开现有存储库的方法,并找到了SVNURL localRepo = SVNURL.fromFile(f);。不幸的是,这会产生错误:
Exception in thread "main" org.tmatesoft.svn.core.SVNException: svn: E180001: Unable to open an ra_local session to URL
svn: E180001: Unable to open repository 'file:///home/reichelt/workspace/hamcrest/hamcrest-read-only'
svn: E180001: Unable to open repository 'file:///home/reichelt/workspace/hamcrest/hamcrest-read-only'
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)
at org.tmatesoft.svn.core.internal.io.fs.FSRepository.openRepository(FSRepository.java:796)
at org.tmatesoft.svn.core.internal.io.fs.FSRepository.getLatestRevision(FSRepository.java:121)
at de.performanzanalysator.vcs.SVNUtils.getVersions(SVNUtils.java:70)
at de.performanzanalysator.vcs.SVNUtils.main(SVNUtils.java:90)
有谁知道有办法用 SVNKit 打开现有的、已经下载的存储库吗? SVNWCClient 似乎是对的,但我找不到任何方法可以使用 SVNWCClient 打开存储库。
我使用的是 SVNKit 1.8.5。
【问题讨论】:
-
您确定
file:///home/..是有效回购的有效路径吗? -
是的,如果我执行 cd /home/.. (通常这是一条较长的路径,没有 '..'),我会进入一个可以执行例如 svn log 的目录,所以看起来就像它是一个有效的回购一样。
-
/home/..与根文件夹/相同,而您的结帐命令将hamcrest-read-only指定为结帐目标。您应该重新检查签出 repo 的位置,并将正确的位置传递给 Java 代码。而且,如果你真的设法在 *nix 系统上结帐到/,你会遇到各种各样的问题。 -
真正的路径是
/home/reichelt/workspace/hamcrest/hamcrest-read-only,是正确的路径,包含一个.svn文件。我只想缩短线程以提高可读性,因此写了/home/..,但这不是真正的路径。对不起,我应该在开头写/home/XX或真实路径。 -
SVNKit 的版本是什么,用于签出 repo 的 svn 客户端的版本是什么?