2010-09-30 116 views
1

我有一個目錄包含來自遺留構建系統的文件。我想在SVN倉庫中重新創建此構建系統的時間線。爲此,我必須採取每個構建,提取其所有文件,將它們放在合理的目錄結構中,將整個目錄結構提交到svn,併爲每個構建創建標記(以便輕鬆識別它們)。現在,我可以從該系統獲取文件,將它們放入目錄結構中,並且我試圖使用SVNKit將整個目錄放入SVN中(因爲整個同步系統是使用Java代碼的系統)。無法提交與SVNKit的目錄樹

所以,我做的是

  1. 將所有新文件使用SVNWCClient.doAdd(main.workDirectory, true, false, false, SVNDepth.INFINITY, false, false /* we only add files below this path */)
  2. 然後commiting使用SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY)

不幸的是整個目錄到SVN,這是行不通的那麼好..

確實,每次我嘗試調用這些方法時,我都會得到

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提交根目錄及其所有子項沒有最小的問題。那麼,是否可以/應該更改我的代碼以使其工作?

回答

2

事實上,存在一個微妙的問題。讓我解釋一下。

當我打電話SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY),SVNKit希望我,像真正的svn命令行客戶端,給作爲文件數組(第一個參數,changedFiles)犯基目錄的列表。欲瞭解更多信息,請看svn book

我用那個命令做的事情就是精確地在每個角落直接提交它。不幸的是,因爲這是我第一次提交,那些文件目錄還沒有在SVN中,因此提交失敗慘不忍睹。

因此,解決方案是用所使用的根目錄代替changedFiles,它只是工作。