2009-06-01 6 views
2

J'ai un référentiel SVN existant qui contient un dossier qui contient mon projet. Je souhaite savoir s'il existe un moyen de créer un nouveau référentiel avec le dossier de mon projet en tant que racine et de conserver tout l'historique de subversion (log) avec lui. Notez que cela ne me dérange pas de perdre les numéros de révision du dépôt d'origine.Dossier SVN vers la nouvelle racine du référentiel

Merci.

+0

Est-ce que la création d'un nouveau dépôt est la clé ici ou juste pour se débarrasser d'un niveau de sous-répertoires? Si ce dernier, "svn move" est votre ami. – laalto

+1

Cette question a été posée et a déjà été répondue plusieurs fois - recherche de "svndumpfilter". –

Répondre

2

Vous pouvez copier le référentiel manuellement ou à l'aide de svnadmin.

Vous pouvez ensuite déplacer les sous-répertoires de votre projet sous la racine et supprimer tout le reste, et ainsi conserver la structure de répertoire souhaitée. L'historique sera conservé, par fichier, mais il se souviendra que les fichiers avaient un chemin différent (ce qui est probablement une bonne chose).

+0

Les mises à jour ultérieures échoueront-elles sans l'utilisation de 'svn relocate'? –

2

La solution d'Avi est probablement la plus simple, mais présente l'inconvénient que le nouveau référentiel contiendra l'historique complet de tous les éléments en dehors de ce projet. Dans l'exemple ci-dessous, je suppose que vous êtes sur la ligne de commande d'une machine * NIX et que vous vous trouvez dans un répertoire contenant votre référentiel existant.

svnadmin create new-project-repo # create new repo next to old repo 
svnadmin dump old-project-repo | svnadmin load new-project-repo 
svn mv file://$PWD/new-project-repo/my-project/trunk file://$PWD/new-project-repo/trunk 
svn mv file://$PWD/new-project-repo/my-project/branches file://$PWD/new-project-repo/branches 
svn mv file://$PWD/new-project-repo/my-project/tags  file://$PWD/new-project-repo/tags 
# ... svn rm file://$PWD/new-project-repo/XXX for all the cruft still at the top level. 

Si vous exécutez subversion 1.6.x, svnsync fournit une meilleure option. Avant 1.6.x, svnsync ne pouvait être utilisé que pour copier des dépôts entiers. Avec 1.6.x il a gagné la capacité de copier seulement un sous-arbre donné du dépôt.

svnadmin create new-project-repo 
# svnsync needs the ability to set revision properties, so we must install a pre-revprop-change 
# hook script which just exits with status 0 (no error). On *NIX systems, the program `true` will do this. 
ln -s /usr/bin/true new-project-repo/hooks/pre-revprop-change # possibly /bin/true 
svnsync init file://$PWD/new-project-repo file://$PWD/old-project-repo/my-project 
svnsync sync file://$PWD/new-project-repo 
# go drink some coffee 
1

FYI: L'option svnsync a fonctionné pour moi avec subversion 1.5.3.

Aussi, voici un script batch de Windows faire la même chose:

SET OLD_REPO_URL =
SET NEW_REPO_URL = D:/Stockages/new-projet repo
SET NEW_REPO_FILE_PATH = D: \ référentiels \ new-projet repo

svnadmin create% NEW_REPO_FILE_PATH%
echo exit 0>% NEW_REPO_FILE_PATH% \ crochets \ pré-revprop-change.bat

svnsync fichier init: ///% NEW_REPO_URL%% OLD_REPO_URL%
fichier svnsync: ///% NEW_REPO_URL%

Note: Vous ne serez pas en mesure de parcourir le nouveau référentiel jusqu'à ce que la synchronisation soit terminée.

Questions connexes