158 votes

Comment déplacer un seul dossier d'un référentiel Subversion vers un autre référentiel?

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?

184voto

Samuel Points 21085

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.

30voto

compie Points 3773

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.

6voto

Adam Bellaire Points 42797

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.

2voto

nios Points 48

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.

2voto

Peter Stone Points 1962

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 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X