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

StackOverflow https://stackoverflow.com/questions/417726

Question

J'ai un "docs". dossier dans un référentiel Subversion nommé "projet". Je suis parvenu à la conclusion qu'il devrait vraiment être conservé dans un référentiel Subversion séparé intitulé "project_docs".

Je souhaite déplacer les "docs". dossier ( et toutes ses révisions ) vers le "quot_projet_projet". dépôt. Y a-t-il un moyen de le faire?

Était-ce utile?

La solution

Si vous avez accès au référentiel lui-même (et non à une copie de travail), vous devriez être en mesure de vider le référentiel actuel, de le filtrer pour n'inclure que des informations sur le dossier docs et de 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 conserver l'historique des révisions et vous devez vous charger de copier les fichiers dans le nouveau référentiel et de les valider.

Autres conseils

svndumpfilter a un défaut grave: si un fichier ou un chemin est copié d'un chemin que vous filtrez à un chemin en cours de filtrage, svndumpfilter ne pourra pas renseigner 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 vers de nouveaux référentiels distincts.

Je ne crois pas que vous puissiez le faire à distance (c'est-à-dire sans copie locale). Mais cela devrait fonctionner: svn exportez le dossier du serveur d'origine, puis svn add dans votre nouveau référentiel.

J'aime:

$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit

Edit: D'oh, ça laisse tomber l'histoire. Utilisez svnadmin comme décrit Samuel .

Pour référence future:

La documentation SVN indique clairement:

Si vous envisagez de modifier manuellement le fichier de vidage pour supprimer un répertoire de niveau supérieur, assurez-vous que votre éditeur n'est pas configuré pour convertir automatiquement les caractères de fin de ligne au format natif (par exemple, \ r \ n en \ n), car le contenu ne concordera pas avec les métadonnées. Cela rendra le fichier de vidage inutile.

Utilisez sed ou Vim pour remplacer le répertoire de niveau supérieur, mais ce nom de répertoire était également contenu dans un fichier de projet !!!! Cela provoque une erreur de somme de contrôle de chargement SVN.

Ainsi, lorsque vous effectuez cette opération, ne faites pas de substitutions de chaînes avec sed uniquement le nom du chemin.

Remplacez “Node-path: old_path” par “Node-path: new_path”. Voir le chapitre 5 du livre SVN “Administration du référentiel” pour plus de détails.

J'ai essayé d'utiliser la réponse acceptée, mais j'avais un énorme référentiel et je voulais exporter un petit répertoire. Je ne pouvais pas me permettre de vider l'intégralité du référentiel.

J'ai donc uniquement exporté les révisions dans lesquelles mon répertoire a été modifié (cela peut ne pas fonctionner si le répertoire que vous souhaitez exporter comporte des références à d'autres emplacements de votre référentiel).

svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",$1);print $1}' > revisions.txt
#tac for revisions in reverse (oldest revision first)
tac revisions.txt | while read line; do svnadmin dump /svn/old_repo -r$line >> ./docs_revisions.dump ; done

#You don't have to filter if you commited only files in your directory docs in your exported revisions
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./docs_revisions.dump > ./docs_only.dump

svnadmin load /svn/new_repos < ./docs_only.dump

Vous devez remplacer votre URL de référentiel ( URL_to_docs ), votre emplacement sur le serveur ( / svn / old_repo ) et le chemin d'accès à la documentation dans le référentiel ( chemin / vers / docs )

Vous pouvez facilement modifier votre docs_only.dump si vous souhaitez modifier l'emplacement de votre répertoire doc dans votre nouveau référentiel.

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