2008-12-06 21 views
41

Estoy trabajando en un proyecto que no tiene una estructura de directorio trunk/branches/tags - es decir. todo está en la raíz del svn repo.SVN creando el directorio troncal en el repositorio existente

Me gustaría crear un directorio troncal y en el directorio raíz, y mover todo en el directorio raíz al nuevo directorio troncal.

¿Cuál es la mejor manera de hacerlo?

La primera cosa que yo consideraba era

svn mkdir trunk 
(for each file or directory that is not called trunk:) 
svn mv FILEorDIR trunk/ 

Pero esto borra cada archivo y luego añade de nuevo. ¿Hay una mejor manera?

Gracias.

Respuesta

9

Esto es similar a la forma en que lo hice en el pasado. Su solución en realidad copia cada archivo, luego elimina el original. Debido a la forma en que Subversion implementa copias, se conserva el historial de cada archivo.

Después de hacer esto, puede señalar las cajas existentes en la nueva ubicación usando svn switch.

+0

puede darle el comando exacto para svn switch? Además, ¿hay alguna manera de forzar el cambio para que no se actualice a la última revisión en la copia de trabajo donde se ejecuta? –

+0

@Vijay Dev: Recomiendo la documentación ['svn switch'] (http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.switch.html) para más detalles. –

0

Es posible que desee examinar la herramienta svnadmin.

Para ser honesto, no he intentado esto antes, y es probable que obtener una respuesta de alguien que tiene, pero se puede trabajar desde algo como esto:

Usted debe ser capaz de init un nuevo repositorio, crear un directorio 'tronco' en él, entonces volcar su repositorio anterior en el 'tronco'.

3

Si está utilizando eclipse IDE y Subclipse para SVN, puede continuar y crear carpetas en SVN y mover todos los archivos/dir desde la raíz al directorio troncal y luego extraer el ProjectName/trunk en el área de trabajo de eclipse.

+1

Además, si tiene la intención de copiar a un repositorio limpio (uno que no tiene ningún proyecto registrado, por lo que no tiene estructura troncal/ramas/etiquetas), en Eclipse puede crear la estructura troncal/ramas/etiquetas con Repo> Nuevo> Estructura del proyecto ...> Monolítico. Después de eso, simplemente copie/pegue todos los elementos del repositorio de origen. – Saran

1

Aquí se muestra la manera de usar el método svn + ssh para crear la carpeta troncal en la raíz svn en el terminal Unix. "Projectname" es la raíz "identificador" cuando se crea el proyecto en el SVN:

svn mkdir svn+ssh://[email protected]/projectname/trunk -m "Create the trunk folder" 
13

que tenía exactamente el mismo problema y lo resolvió después de mirar a través de varias páginas diferentes (éste incluido). Aquí está mi solución:

Nota: Antes de empezar, si va a utilizar svn switch para mantener su copia de trabajo y evitar la salida a la cesión temporal de nuevo, lo mejor es asegurarse de que su copia de trabajo está actualizada y no tiene cambios no confirmados

On con la solución ...

//REPO_URL = The URL for the repo on the SVN server. 
//In my case it was https://IP_ADDRESS:PORT/svn/my_repo 

//Make the trunk dir in the root of your SVN repo 
svn mkdir REPO_URL/trunk -m "making trunk dir" 

//Move everything from your root dir to your new trunk dir 
svn move REPO_URL/A_FOLDER REPO_URL/trunk/A_FOLDER -m "moving folders to trunk" 
svn move REPO_URL/ANOTHER_FOLDER REPO_URL/trunk/ANOTHER_FOLDER -m "blah" 
svn move REPO_URL/A_FILE.TXT REPO_URL/trunk/A_FILE.TXT -m "moving files to trunk" 
//Keep going until you've moved everything from your root dir to the trunk dir... 

Así que ahora, en el servidor SVN, todo está en la carpeta del tronco. ¡Dulce!

Pero mi repo es de 60 GB y en un servidor remoto. Prefiero no verlo de nuevo. svn switch le permitirá señalar su copia de trabajo existente al nuevo trunk dir para que pueda continuar trabajando con la copia que tiene. Vaya a la carpeta raíz de su copia de trabajo y ejecute svn switch REPO_URL/trunk --ignore-ancestry. Debería decir At revision X donde X es la revisión después de mover todos sus archivos desde el directorio raíz al directorio troncal. ¡Eso es! Tal vez hacer una actualización SVN para una buena medida :)

+1

parece una mejor respuesta que la que fue seleccionada –

0

Publicación anterior pero yo también tenía el mismo problema con todos mis repos estaban en la raíz y no en los troncos. Esto presentaba un problema al intentar un comando simple git svn clone. Después de horas de ensayo y error, que era un simple:

git svn clone --username byname http://www.MySVNserver.com:81/repos/project1 --no-metadata --trunk=.

Cuestiones relacionadas