2010-05-02 22 views
35

Cometí el error de crear un repositorio de Subversion sin los directorios habituales trunk, branches y tags. Es decir, el directorio raíz del proyecto se correlaciona con el directorio raíz del repositorio. Ahora quiero crear una rama de características, pero no hay un buen lugar para ubicarla. Lo que me gustaría hacer es mover / a /trunk, preservando sus propiedades e historial. ¿No tengo suerte?¿Hay una forma limpia de mover/a/tronco?

Respuesta

33

La forma más limpia de hacer esto es utilizando svnadmin a volcar todo el repositorio usando

svnadmin dump 

A continuación, crear un nuevo repositorio con el directorio del tronco en la raíz, y volver a cargar el volcado con

svnadmin load --parent-dir trunk

Si haces un movimiento svn, eso ensuciará las cosas si alguna vez actualizas a una revisión antes de la mudanza, ya que los archivos volverán a su ubicación anterior, que probablemente no es lo que querer.

+0

-1 No es necesario llegar a tales longitudes: simplemente mueva todo el árbol. – sleske

+2

@sleske - He manejado exactamente este problema antes - vea mi nota sobre los problemas de hacer un movimiento svn. Esta es la forma correcta de hacerlo. –

+0

No he tenido la oportunidad de probar esto, pero parece exactamente la solución que estoy buscando. – Metaphile

1

¿No puedes simplemente crear el directorio troncal y mover todo desde/hacia el tronco?

1

Como señalan las otras respuestas, basta con hacer un svn mv en el directorio troncal para hacer esto. Para actualizar su copia de trabajo, consulte el comando svn switch.

+0

Esto parece m tiene el mayor sentido, desearía poder votar^3 +. No estoy seguro de qué comandos de línea de comando sucedieron debajo de las cubiertas, pero con TortoiseSVN utilicé Repo-Browser para crear un directorio "troncal" y luego arrastré y solté los contenidos versionados en el directorio troncal con "Mover a troncal" que aparece como información sobre herramientas . Todos los registros fueron retenidos. No pude usar el conmutador svn, simplemente eliminé el directorio de metadatos .svn y lo volví a verificar, pero estoy seguro de que el cambio de svn tendría más sentido. –

1

No basta con crear una carpeta trunk y mover todo el contenido de la raíz a la misma. Puede hacerlo desde el explorador o mediante el navegador repo, la historia persistirá.

2

Necesita crear /trunk y hacer un movimiento svn de todos los contenidos de la raíz dentro del tronco y luego confirmar.

Después de eso, switch tendrá su copia de trabajo en /trunk.

2

La manera más fácil sería crear un directorio "troncal", luego mover todo lo demás en él. Tendrás que copiar las propiedades de forma manual, pero no debería ser un gran problema. El historial es por archivo, por lo que debe permanecer.

El otro problema a considerar es si alguien más tiene el repositorio abierto. Será difícil fusionarse, así que asegúrese de que todos tengan sus cambios registrados antes de hacer esto.

+0

+1 para considerar problemas en caso de fusión – sleske

+1

Es la manera más fácil, pero debe tener cuidado de que si actualiza alguna vez una revisión antes de la mudanza, sucederán cosas inesperadas (su copia de trabajo se eliminará a sí misma;)) –

+0

de acuerdo. Es un poco más complicado usar 'svnadmin' pero los resultados son mejores, y los problemas de combinación no son peores que con el método ingenuo. He votado tu respuesta. –

-2

Ejemplo rápido de cómo lo hice.

yo quería mover a file:///svn/myRepofile:///svn/myRepo/trunk

cd/ 
svnadmin dump /svn/myRepo > my.dump 
killall svnserve 
sudo rm -r -f /svn/myRepo 
svnadmin create /svn/myRepo 
svnserve -d -r /svn 
svn mkdir file:///svn/myRepo/trunk -m "Created trunk dir" 
svnadmin load /svn/myRepo --parent-dir trunk < my.dump 
26

usados ​​therefromhere's answer, que funcionaba bien, pero quería añadir los comandos incluidos los parámetros, es decir,es ejecutado en la línea de comandos del servidor SVN:

  1. Dump su repositorio existente en un archivo:

    svnadmin dump /path/to/myrepo/ > /some/dir/myproject.svndump 
    
  2. Create un nuevo repositorio:

    svnadmin create /path/to/mynewrepo/ 
    
  3. Add la trunk/ carpeta y commit que, en el directorio de copia de trabajo:

    mkdir trunk; svn add trunk; svn commit trunk -m "Add: trunk folder" 
    
  4. Load el volcado en el nuevo repositorio usando trunk como parent-dir:

    svnadmin load --parent-dir trunk /path/to/mynewrepo/ < /some/dir/myproject.svndump 
    
+3

Es fácil pasar por alto las instrucciones, pero esto debe ejecutarse en el * servidor *, no en la copia de trabajo. De lo contrario, obtendrá "No se puede abrir el archivo '/ ruta/a/myrepo/format': no ​​existe dicho archivo o directorio". – DavGarcia

Cuestiones relacionadas