2011-07-28 13 views
6

Uno de nuestros repositorios git es lo suficientemente grande como para que un clon git tome una cantidad molesta de tiempo (más de unos pocos minutos). El directorio .git es ~ 800M. La clonación siempre ocurre en una LAN de 100Mbps en ssh. Incluso la clonación en ssh a localhost lleva más de unos minutos.¿Cómo se manejan los repositorios grandes de git?

Sí, almacenamos datos y blobs binarios en el repositorio.

A falta de sacarlos, ¿hay alguna otra manera de hacerlo más rápido?

Incluso si moviendo archivos grandes, éramos una opción, ¿cómo podríamos hacerlo sin una gran interrupción reescribiendo la historia de todos?

+2

¿Has comprimido? ¿Es su '.gitignore' configuración suficiente? Pasé de 4.3gb repo a 450mb con estas consideraciones y me salvó la vida, jaja – Nic

+0

@melee tristemente la mayoría ya está comprimida –

+0

Me encantaría estar en tus zapatos. Nuestro git repo ha alcanzado recientemente unos 2 GB. Nuestros servidores principales están a unos pocos países de distancia, por lo que la conexión es más lenta, por lo que la clonación tarda entre 30 y 45 minutos. Lo que trato de decir es: si piensas que tu situación es mala, siempre hay mucha gente para la que es peor;). –

Respuesta

0

Estoy bastante seguro de que no podrá mover esos archivos binarios sin reescribir el historial.

Dependiendo de cuáles sean los binarios (quizás algunas bibliotecas preconstruidas o lo que sea), podría tener una pequeña secuencia de comandos para que el desarrollador la ejecute después de la salida, que los descarga.

0

Gigabit ... fiber ... Sin reescribir el historial, es bastante limitado.

Puede probar git gc puede que lo limpie un poco, pero no estoy seguro si eso se hace con un clon de todos modos.

+1

Si él hizo 'git gc --aggressive' y lo presionó, ¿actualizaría el control remoto? Podría ser la base para una nueva pregunta – Nic

+1

Me preguntaba esto el otro día ... Creo que voy a escribir una pregunta. – Andy

1

Me enfrenté a la misma situación con un repositorio ~ 1GB, que necesitan transferirse a través de DSL. Fui con el sneakernet a menudo olvidado: ponerlo en una unidad flash y conducirlo a través de la ciudad en mi automóvil. Eso no es práctico en cada situación, pero en realidad solo tienes que hacerlo para el clon inicial. Después de eso, las transferencias son bastante razonables.

+0

Y no se olvide de la capacidad 'git-bundle' (para sneakernet y otros métodos de transferencia manual) por lo que solo debe transferir los ** nuevos ** bits entre los diferentes repos –

Cuestiones relacionadas