En SVN, ¿cómo copio solo los subdirectorios de un directorio a otro directorio?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

A través de la línea de comando, generalmente hago esto:

cp -rRp /path/to/a\_folder/. /path/to/another\_folder

Esto copia solo el contenido debajo de una_carpeta en otra_carpeta . En SVN necesito hacer lo mismo, pero no puedo entenderlo. Siempre termino con esto:

/path/to/another\_folder/a\_folder

SVN vomita incluso cuando intento esto:

svn copy file:///path/to/a\_folder/* file:///path/to/another\_folder

Dice que no existe.

EDIT:

Esto probablemente ayudaría. La estructura de directorios para mi proyecto se ve así:

my_project
  /branches
  /tags
  /trunk
  /vendor
    /1.1

Necesito obtener el contenido de 1.1 del proveedor en el tronco sin que realmente copie la carpeta 1.1.

¿Fue útil?

Solución

¿Ha considerado usar svn merge?

Dado un repositorio como este:

trunk/a_folder/foo
trunk/a_folder/bar
trunk/new_folder/baz

use estos comandos para fusionar los directorios foo y bar:

cd trunk/new_folder
svn merge -r1:HEAD http://svn/repo/trunk/a_folder .

Otros consejos

Como seguramente descubrió, copiar a un directorio de destino que ya existe no funcionará:

svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

porque el tronco ya existe, por lo que terminaría con:

svn://my_project/trunk/1.1

El uso de fusión tiene la desafortunada propiedad de no mantener el historial de la etiqueta del proveedor 1.1 en subversión anterior a la 1.5 que introdujo el seguimiento de fusión. Puede que no te importe. En este caso, fusionar sería la solución correcta:

svn co svn://my_project/trunk trunk-wc
svn merge svn://my_project/trunk svn://my_project/vendor/1.1 trunk-wc

La mejor manera de leer esta combinación es: Primero determine los cambios necesarios para hacer que trunk sea idéntico a vendor / 1.1 , luego aplique esos cambios a la copia de trabajo dada (también de baúl, en este caso).

Debo señalar que esta fusión efectivamente eliminará todo lo que estaba en el tronco previamente. Entonces, si ya tiene modificaciones locales (no de proveedores) en el enlace troncal, querrá aplicar solo los cambios entre 1.1 y la caída del proveedor anterior:

svn co svn://my_project/trunk trunk-wc
svn merge svn://my_project/vendor/1.0 svn://my_prjoect/vendor/1.1 trunk-wc

Si tronco existe, pero está vacío , tiene dos opciones: reemplazar el tronco o escribir un pequeño bucle de shell:

Reemplazar el tronco se ve así:

svn rm svn://my_project/trunk
svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

Aprovechando el shell (bash):

svn co svn://my_project/trunk trunk
svn co svn://my_project/vendor/1.1 1.1
( cd 1.1
  for x in * ; do
    svn cp $x ../trunk
  done 
)
svn ci trunk

Este enlace explica una solución alternativa.

http://svn.haxx.se/users/archive- 2004-12 / 1537.shtml

Básicamente, lo que dice es que si la carpeta de destino no existe en el repositorio, obtendrá los contenidos de su carpeta de origen en la carpeta de destino.

Vea el siguiente ejemplo. La carpeta 07-03-2012 no existe en su repositorio. Una vez que ejecute el siguiente comando, obtendrá el contenido de la carpeta HEAD en 07-03-2012.

svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test"

Creo que lo que quieres es que el contenido del tronco termine en la carpeta /tags/version-1.0/ sin que haya una carpeta / trunk adicional ahí. es decir, esto es malo: /tags/version-1.0/trunk/stuff . Esto es bueno: /tags/version-1.0/stuff .

Para obtener esto, hago un proceso de 2 pasos:

svn copy http://localhost/MyProject/trunk    http://localhost/MyProject/tags/

# now I have /MyProject/tags/trunk

svn rename http://localhost/MyProject/tags/trunk  http://localhost/MyProject/tags/version-1.0

Estás muy, muy cerca:

svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder

simplemente suelte el / * del primer argumento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top