我想使用SVNKit(版本1.7)将一个服务器目录内容(已经存在于服务器目录上的版本化目录的所有版本化内容)提交到同一服务器上的新目录。
这个新目录已经存在;或者必须根据abs路径在适当的位置添加/制作它。 (将新的目录添加到服务器我可以做到)
但我无法将源路径内容提交到dest路径(已存在或新创建)。
我理解,因为我希望服务器提交服务器,在这里,不会有任何工作副本。
我检查了Committing changed file via SVNKit without local checkout?中提到的解决方案 但是无法让它发挥作用,因为我没有得到源路径和应该是什么路径。
作为一种解决方法,我尝试了复制功能,但正如您所知,通过复制,文件的早期历史记录将被保留......我正在寻找在源路径中创建所有内容的新版本到dest路径。 / p>
我尝试的另一件事是在c://驱动器上创建临时本地工作副本,检查源代码到此本地目录的代码,然后将其提交到dest路径。但这不是合适的方式:(也,我不能删除本地临时工作的coopy;它说它包含root,因此无法删除。
任何人都可以帮助我使用SVNKit进行服务器到服务器的提交吗?
感谢。 -Aditya
答案 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方法。