无法使用SVNKit提交目录树

时间:2010-09-30 15:45:28

标签: java tortoisesvn commit svnkit

我有一个包含旧版构建系统文件的目录。我想在SVN存储库中重新创建此构建系统的时间轴。

为此,我必须采用每个构建,提取其所有文件,将它们放在合理的目录结构中,将整个目录结构提交到svn,并为每个构建创建标记(以便轻松识别它们)。现在,我可以从该系统获取文件,将它们放在目录结构中,并且我正在尝试使用SVNKit将整个目录放入SVN(因为整个同步系统是使用Java代码的系统)。 / p>

所以,我的工作是

  1. 使用SVNWCClient.doAdd(main.workDirectory, true, false, false, SVNDepth.INFINITY, false, false /* we only add files below this path */)
  2. 将所有新文件添加到svn
  3. 然后使用SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY)
  4. 提交整个目录

    不幸的是,它效果不好......

    实际上,每当我尝试调用这些方法时,我都会得到

    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提交根目录及其所有子文件而不使用最小的问题。那么,是否可以/应该更改我的代码以使其正常工作?

1 个答案:

答案 0 :(得分:2)

事实上,有一个微妙的问题。让我解释一下。

当我调用SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY)时,SVNKit希望我像真正的svn命令行客户端一样,为文件数组(第一个参数changedFiles)提供一个提交基目录列表。有关详细信息,请查看svn book

我使用该命令所做的就是精确地在每个fole上直接提交它。不幸的是,因为这是我的第一次提交,那些文件目录还没有在SVN中,因此提交失败了。

因此,解决方案是用已使用的根目录替换changedFiles,它只是起作用。