我有一个包含旧版构建系统文件的目录。我想在SVN存储库中重新创建此构建系统的时间轴。
为此,我必须采用每个构建,提取其所有文件,将它们放在合理的目录结构中,将整个目录结构提交到svn,并为每个构建创建标记(以便轻松识别它们)。现在,我可以从该系统获取文件,将它们放在目录结构中,并且我正在尝试使用SVNKit将整个目录放入SVN(因为整个同步系统是使用Java代码的系统)。 / p>
所以,我的工作是
SVNWCClient.doAdd(main.workDirectory, true, false, false, SVNDepth.INFINITY, false, false /* we only add files below this path */)
SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY)
不幸的是,它效果不好......
实际上,每当我尝试调用这些方法时,我都会得到Exception in thread "main" org.tmatesoft.svn.core.SVNException: svn: Commit failed (details follow):
svn: 'E:\JavaWorkspace\workDirectory\subpath\deep\below\initial\path' is not under version control
and is not part of the commit,
yet its child is part of the commit
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:85)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:69)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCollectCommitItems(SVNCommitClient.java:1236)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCommit(SVNCommitClient.java:825)
at com.perigee.svnsync.SvnExecutor.commit(SvnExecutor.java:229)
at com.perigee.svnsync.SvnSynchronizer.examineRelease(SvnSynchronizer.java:40)
Caused by: org.tmatesoft.svn.core.SVNException: svn: 'E:\JavaWorkspace\workDirectory\subpath\deep\below\initial\path' is not under version control
and is not part of the commit,
yet its child is part of the commit
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.wc.SVNCommitUtil.harvestCommitables(SVNCommitUtil.java:546)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCollectCommitItems(SVNCommitClient.java:1208)
请注意,当我使用TortoiseSVN查看此文件夹时,它似乎是一个完全“正常”的文件夹,可以在SVN中添加...此外,我能够使用TortoiseSVn提交根目录及其所有子文件而不使用最小的问题。那么,是否可以/应该更改我的代码以使其正常工作?
答案 0 :(得分:2)
事实上,有一个微妙的问题。让我解释一下。
当我调用SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY)
时,SVNKit希望我像真正的svn命令行客户端一样,为文件数组(第一个参数changedFiles
)提供一个提交基目录列表。有关详细信息,请查看svn book。
我使用该命令所做的就是精确地在每个fole上直接提交它。不幸的是,因为这是我的第一次提交,那些文件目录还没有在SVN中,因此提交失败了。
因此,解决方案是用已使用的根目录替换changedFiles
,它只是起作用。