Невозможно зафиксировать дерево каталогов с помощью SVNKit - PullRequest
1 голос
/ 30 сентября 2010

У меня есть каталог, содержащий файлы из устаревшей системы сборки.я хочу воссоздать временную шкалу этой системы сборки в репозитории SVN.

Для этого мне нужно взять каждую сборку, извлечь все ее файлы, поместить их в разумную структуру каталогов, передать всю структуру каталогов вsvn, и создайте теги для каждой сборки (чтобы их было легко идентифицировать).На данный момент я могу взять файлы из этой системы, поместить их в структуру каталогов, и я пытаюсь поместить весь этот каталог в SVN с помощью SVNKit (поскольку вся система синхронизации - это та, которая использует код Java).

Итак, что я делаю, это

  1. добавление всех новых файлов в SVN с помощью SVNWCClient.doAdd(main.workDirectory, true, false, false, SVNDepth.INFINITY, false, false /* we only add files below this path */)
  2. Затем фиксация всего каталога с помощью 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без малейшей проблемы.Итак, это то, что я мог / должен изменить в своем коде, чтобы он работал?

1 Ответ

2 голосов
/ 08 октября 2010

На самом деле, была тонкая проблема.позвольте мне объяснить это.

Когда я вызываю SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY), SVNKit ожидает, что я, как настоящий клиент командной строки svn, предоставлю в виде массива файлов (первый параметр, changedFiles) список каталогов базы фиксации.Для получения дополнительной информации взгляните на svn book .

То, что я сделал вместо этого с этой командой, - это перейти точно на каждый фол, чтобы зафиксировать это напрямую.к сожалению, так как это был мой первый коммит, эти каталоги файлов еще не были в SVN, и, как следствие, коммит с треском провалился.

В результате было решено заменить changedFiles на используемый корневой каталог, иэто просто сработало.

...