J'ai un dossier "docs" dans un dépôt Subversion nommé "projet". Je suis arrivé à la conclusion qu'il devrait vraiment être conservé dans un référentiel Subversion distinct nommé "project_docs". Je voudrais déplacer le dossier "docs" ( et toutes ses révisions ) vers le référentiel "project_docs". Est-ce qu'il y a un moyen de faire ça?
Réponses
Trop de publicités?Si vous avez accès au référentiel lui-même (pas une copie de travail), vous devriez pouvoir vider le référentiel actuel, le filtrer pour inclure uniquement des informations sur le dossier docs et le charger dans l'autre référentiel.
Serait quelque chose comme ceci:
svnadmin dump /svn/old_repos > ./repository.dump
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./repository.dump > ./docs_only.dump
svnadmin load /svn/new_repos < ./docs_only.dump
Sans accès au référentiel, vous ne pouvez pas gérer l'historique des révisions et vous devez vous contenter de copier les fichiers dans le nouveau référentiel et de les valider.
svndumpfilter a une faille sérieuse - si un fichier ou un chemin a été copié à partir d'un chemin que vous filtrez vers celui que vous filtrez, svndumpfilter ne sera pas capable de remplir l'historique et le travail échouera.
Vous pouvez utiliser svndumpfilter2 si vous rencontrez ce problème.
Ceci est discuté dans la documentation svn. Consultez la section Maintenance du référentiel sur svndumpfilter
... Il décrit spécifiquement comment vider des projets d'un référentiel central et les déplacer dans de nouveaux référentiels distincts.
Pour une référence future:
SVN de documentation clairement les rapports: Si vous avez l'intention de modifier manuellement le fichier de vidage pour supprimer un répertoire de plus haut niveau, assurez-vous que votre éditeur n'est pas définie pour convertir automatiquement en fin de chaîne de caractères au format natif (par exemple, \r\n \n), car le contenu ne sera pas d'accord avec les métadonnées. Cela rendra le fichier de vidage inutile.
Alors pourquoi ne pas utiliser sed ou vim pour substituer le répertoire de niveau supérieur, mais ce nom de répertoire a été contenue à l'intérieur d'un fichier de projet!!!! Cela provoque svn de charge erreur de somme de contrôle
Ainsi, lorsque vous effectuez cette opération, ne pas faire de la substitution de chaîne avec sed seulement le nom de chemin d'accès.
Remplacer "Nœud-chemin: old_path" avec "Nœud-chemin: new_path". Voir SVN livre chapitre 5 référentiel "administration" pour plus de détails.
Je ne crois pas que vous pouvez le faire à distance (c'est-à-dire sans une copie locale). Mais cela devrait fonctionner: svn export
le dossier du serveur d'origine, puis svn add
à votre nouveau repo.
Comme:
$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit
Edit: D'oh, cela laisse tomber l'histoire. Utilisez svnadmin
comme Samuel le décrit .