使用svnkit将一个服务器目录内容提交到其他目录

时间:2013-09-16 10:33:09

标签: svn commit svnkit

我想使用SVNKit(版本1.7)将一个服务器目录内容(已经存在于服务器目录上的版本化目录的所有版本化内容)提交到同一服务器上的新目录。

这个新目录已经存在;或者必须根据abs路径在适当的位置添加/制作它。 (将新的目录添加到服务器我可以做到)

但我无法将源路径内容提交到dest路径(已存在或新创建)。

我理解,因为我希望服务器提交服务器,在这里,不会有任何工作副本。

我检查了Committing changed file via SVNKit without local checkout?中提到的解决方案 但是无法让它发挥作用,因为我没有得到源路径和应该是什么路径。

作为一种解决方法,我尝试了复制功能,但正如您所知,通过复制,文件的早期历史记录将被保留......我正在寻找在源路径中创建所有内容的新版本到dest路径。 / p>

我尝试的另一件事是在c://驱动器上创建临时本地工作副本,检查源代码到此本地目录的代码,然后将其提交到dest路径。但这不是合适的方式:(也,我不能删除本地临时工作的coopy;它说它包含root,因此无法删除。

任何人都可以帮助我使用SVNKit进行服务器到服务器的提交吗?

感谢。 -Aditya

1 个答案:

答案 0 :(得分:0)

那并不难。如果要保留复制历史记录,可以运行以下代码

ISVNCommitEditor editor = svnRepository.getCommitEditor("", null);

editor.openRoot(latestRevision);
editor.openDir("path", latestRevision); //or use addDir if it doesn't exist
editor.openDir("path/to", latestRevision); //or use addDir if it doesn't exist
editor.openDir("path/to/new", latestRevision); //or use addDir if it doesn't exist
editor.addDir("path/to/new/directory", "/path/to/old/directory", copySourceRevision); 
editor.closeDir();
editor.closeDir();
editor.closeDir();
editor.closeDir();
editor.closeDir();
editor.closeEdit();

但是如果您不想保留历史记录,可以使用

创建编辑器
ISVNCommitEditor editor = svnRepository.getCommitEditor("", null);

然后致电

anotherSvnRepository.setLocation(copySourceUrl, true);
anotherSvnRepository.update(copySourceRevision, "", SVNDepth.INFINITY, false, reporter, customEditor);

而不是reporter使用此代码:

    ISVNReporterBaton reporter = new ISVNReporterBaton() {
        @Override
        public void report(ISVNReporter reporter) throws SVNException {
            reporter.setPath("", null, copySourceRevision, SVNDepth.INFINITY, true);
            reporter.finishReport();
        }
    }; 

customEditor应该是上面构造的editor的包装器,它会使用正确的路径调用editor(也许您应该添加一些openDir / closeDir调用以使编辑器调用正确)。< / p>

例如,您可以查看执行类似操作的svnkitfilter项目的来源。

要了解目录/文件是否存在,请使用SVNRepository#checkPath方法。