Question

J'ai un répertoire contenant des fichiers à partir d'un système de construction hérité. Je souhaite recréer la chronologie de ce système de construction dans un référentiel SVN.

Pour cela, je dois prendre chaque version, extraire tous ses fichiers, les mettre dans une structure de répertoire raisonnable, commettre toute la structure du répertoire à SVN et créer des balises pour chaque version (afin de les identifier facilement). Pour l'instant, je suis en mesure de prendre les fichiers de ce système, de les mettre dans une structure de répertoire, et j'essaie de mettre tout ce répertoire dans SVN en utilisant SVNKIT (car l'ensemble du système de synchronisation est celui en utilisant le code Java).

Alors, ce que je fais est

  1. Ajout de tous les nouveaux fichiers à SVN en utilisant SVNWCClient.doAdd(main.workDirectory, true, false, false, SVNDepth.INFINITY, false, false /* we only add files below this path */)
  2. Puis commit tout le répertoire en utilisant SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY)

Malheureusement, cela ne fonctionne pas si bien ...

En effet, chaque fois que j'essaie d'appeler ces méthodes, je reçois

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)

Notez que, lorsque je regarde ce dossier en utilisant TortoiseSVN, cela semble être un dossier parfaitement "normal" à ajouter en SVN ... en outre, je suis en mesure de commettre le répertoire racine et tous ses enfants utilisant TortoiseVN sans le plus petit problème. Alors, est-ce quelque chose que je pourrais / devrais passer à mon code pour le faire fonctionner?

Était-ce utile?

La solution

En fait, il y avait un problème subtil. Laissez-moi l'expliquer.

Quand j'appelle SVNCommitClient.doCommit(changedFiles, false, null, commitProps, null, false, true, SVNDepth.INFINITY), Svnkit m'attend changedFiles) une liste de répertoires de base de validation. Pour plus d'informations, jetez un œil à livre svn.

Ce que j'ai fait à la place avec cette commande, c'est aller précisément sur chaque fole pour le commettre directement. Malheureusement, comme c'était mon premier engagement, ces répertoires de fichiers n'étaient pas encore dans SVN et, par conséquent, la validation a échoué lamentablement.

En conséquence, la solution était de remplacer changedFiles avec le Dir racine utilisé, et cela a simplement fonctionné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top