2008-10-05 16 views
5

Mi flujo de trabajo normal para crear un nuevo repositorio con subversion es crear un nuevo repositorio, hacer un checkout de la raíz del repositorio, crear mis etiquetas de ramas y mis carpetas y colocar en el tronco mis archivos iniciales . Luego realizo una confirmación de esta "importación inicial", elimino los repositorios extraídos de mi disco duro y realizo una extracción del maletero. Entonces puedo comenzar a trabajar.Subversion large repos import/checkout

Sin embargo, cuando se trata de una importación grande, piense en cientos de megas, y en el control de versiones fuera del sitio (basado en http), esta importación inicial puede tardar bastante tiempo en confirmarse. Lo que es peor, después de comprometerme, tengo que pagar de nuevo este enorme baúl.

¿Hay alguna manera con la subversión de utilizar la copia local de la troncal sin hacer una nueva verificación de los datos que ya están allí?

Respuesta

12

hay - que se llama una "importación en el lugar", y que está cubierto en el FAQ de Subversion aquí:

http://subversion.tigris.org/faq.html#in-place-import

Lo que están haciendo en realidad es la creación de un nuevo proyecto vacío en el repositorio , verificando el proyecto vacío, tu carpeta local, que convierte tu carpeta en una copia de trabajo, y luego agrega todos tus archivos (existentes) a ese proyecto 'vacío', para que se agreguen al repositorio cuando realizas una confirmación de svn.

0

Si ha comprobado una sola carpeta, ha copiado sus archivos en ella, ejecute svn add y svn commit; no debería necesitar eliminar los archivos y volver a realizar el pago.

Usa los archivos en su lugar: una vez que se han confirmado según lo que describes, están listos para ser trabajados.

1

Normalmente utilizo "svn mkdir" para crear el tronco/etiquetas/ramas directamente en el servidor inmediatamente después de crear el repositorio. Luego puedo verificar el tronco vacío, mover mis archivos iniciales a ese directorio, agregarlos y confirmarlos, y comenzar a trabajar.

+0

Personalmente, no me gusta hacer esto porque crea un montón de revisiones innecesarias en mi repositorio. Prefiero ver la raíz, crear la estructura que necesito y hacer una única confirmación de la nueva estructura. – Luke

+0

Luke: Podría decirse que su repositorio de control de fuente contendrá, en su mayoría, "revisiones innecesarias", por lo que no estoy seguro de cómo una confirmación adicional marcará la diferencia. (Puede crear los tres directorios a la vez con "svn mkdir dir1 dir2 dir3 -m whatever") –

3

Acepto el procedimiento de "importación en el lugar" y también el uso de una secuencia de comandos para la estructura TTB (upvoted ambos).

Sólo una pequeña pista:

No debería importar un gran número (decenas de miles) de archivos en una única confirmación, si se utiliza http (s), ya que el tiempo para mostrar el historial de versiones escalas por el número de entradas agregadas. La razón de este comportamiento es que apache tiene que autenticar todas las rutas agregadas en el archivo svnaccess (por supuesto, solo si habilitó la autorización basada en ruta). Esto puede hacer que su repositorio sea inutilizable, ya que todos los archivos tendrán que esperar en un registro svn para este gran rev.

Usted debe dividir enormes importaciones en niveles de directorio

+0

A veces obtiene la propiedad de un proyecto que existe desde hace algún tiempo pero que nunca ha estado bajo control de versiones. Los proyectos que usan recursos de video pueden crecer bastante. – Luke

+0

eso no es problema, solo el número de archivos countk, no su tamaño. Y esto solo es aplicable a apache, no al servidor svn en sí mismo –

1

svn checkout --force permite que obtiene una workingcopy 'sobre' un trazado existente. Guarda tus archivos antiguos y agrega archivos que están solo en tu repositorio.

Para crear su repositorio: Puede realizar múltiples comandos mkdir en un repositorio en una única confirmación usando el comando 'svnmucc' que está disponible en la mayoría de las distribuciones de Subversion (por ejemplo, SlikSVN).

Escriba svnmucc sin argumentos para obtener ayuda.