svn: ¿Cómo dividir una gran comisión en varias pequeñas confirmaciones?

Creé un nuevo repository para un proyecto y agregué una base de código existente (llvm). Esta base de código es de aproximadamente 18,000 files, lo que hace que mi confirmación inicial tome mucho time. (lea 5 horas)

¿Hay alguna manera de dividir este compromiso ENORME en varios compromisos más pequeños? ¿Para que pueda completar más rápido?

Cuando se siembra un nuevo repository con una gran cantidad de files, recomiendo usar un command svn import desde el server en lugar de enviar los files desde una máquina remota. La forma más fácil de hacer esto es:

  1. Agrupe el código en un único file (usando gzip, 7zip, etc.)
  2. Transfiera ese file al server (usando rsync, scp, etc.)
  3. Inicie session en el server de forma remota
  4. Descomprimir el file en un directory temporal
  5. Use svn import para inicializar el repository

Esto demostrará ser significativamente más rápido en la mayoría de los casos. La transferencia de un único file grande a través de la networking suele ser mucho más rápido que la transferencia de muchos files más pequeños, incluso si no se tiene en count la compression. La diferencia de performance es significativamente mayor con Windows. Algunas versiones de Subversion tienen un error de Windows que hace que cada file se abra y cierre una connection de networking separada, lo que agrega una cantidad significativa de sobrecarga en comparación con el uso de una única connection de networking para toda la operación.

Hay un caso en que las confirmaciones más pequeñas pueden ser importantes:

  • Repo se sirve en http por mod_dav_svn de Apache
  • la autorización basada en ruta está en uso
  • SVNPathAuthz short_circuit no está configurado

Puede dividir una confirmación especificando files individuales. Sin embargo, no es probable que esto lo acelere: aún tiene que mover los files a través de la networking y escribirlos en el disco. De hecho, es bastante posible que vaya más despacio, ya que Subversion necesita bloquear el repository en algún momento de una actualización (para que pueda asignar un número de revisión único).

Creo que será mejor que cree el repository en su disco local, realice la confirmación allí (lo que elimina la sobrecarga de la networking) y luego envíe el repository a su destino final.

Ir con trozos más pequeños puede no dar como resultado una disminución del time total gastado.

Al tomar en count el inicio del process, la networkingucción y la sobrecarga de comunicación, varias confirmaciones más pequeñas probablemente requerirán más time total en comparación con una única comisión enorme.

No mencionó qué sistema operativo se está utilizando, pero ¿qué hay de instalar SVN Tortoise y seleccionar todos los files necesarios para cada confirmación? En cualquier caso, SVN está basado en un directory, por lo que si sus 18,000 files están en directorys separados, entonces, por supuesto, confirme cada directory por separado.

Aquí hay un par de enlaces en caso de que usar la línea de command sea una opción:

http://svnbook.networking-bean.com/en/1.7/svn.ref.svn.c.add.html

http://svnbook.networking-bean.com/en/1.7/svn.ref.svn.c.commit.html