¿Cómo puedo clonar un repository git que se ha vuelto demasiado grande?

Estoy trabajando con un git repo que es muy grande (> 10 gb). El repository en sí tiene muchos files binarys grandes, con muchas versiones de cada uno (> 100mb). Las razones para esto están más allá del scope de esta pregunta.

Actualmente, ya no es posible clonar correctamente desde el repository, ya que el server se quedará sin memory (tiene 12 GB) y enviará un código de falla. Lo pegaría aquí, pero lleva más de una hora llegar al punto de falla.

¿Hay algún método por el cual pueda hacer que un clon tenga éxito? ¿Incluso uno que toma una copy parcial del repository? ¿O una forma en que puedo clonar en trozos del tamaño de un bocado que no harán que el server se ahogue?

Use rsync para copyr todo el repository apuntándolo al directory de nivel superior que contiene .git . Luego, cambie los controles remotos en .git / config para regresar al original.

Esa es la única key que tengo que cambiar en .git/config , pero searchía cualquier otro que sea específico del host. La mayoría de ellos son bastante auto explicativos.

Una respuesta a '¿Cómo puedo clonar un repository git que se ha vuelto demasiado grande?' es 'Reducir su tamaño, eliminando las Big Blobs' .

(Debo aclarar que el solicitante aclara en un comentario que repo-fixing está "más allá del scope de esta pregunta", sin embargo, el comentario también dice "Estoy trabajando para una solución rápida que me permita clonar el repository en este momento", por lo Estoy publicando esta respuesta porque a) es posible que no estén al tanto de The BFG y así sobreestiman la dificultad de limpiar un repository, yb) de hecho, es muy rápido.

Para limpiar el repository fácil y rápidamente , use The BFG :

 $ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git 

Cualquier file viejo de más de 100MB de tamaño (que no esté en su última confirmación) será eliminado del historial de su repository Git. A continuación, puede usar git gc para limpiar los datos muertos:

 $ git gc --prune=now --aggressive 

Una vez hecho esto, su repos será mucho más pequeño y debe clonar sin problemas.

Descripción completa: soy el autor de BFG Repo-Cleaner.

Puedes intentar pasar --depth option a git clone . ¿O puedes copyrlo usando rsync o algo así?

Si tiene acceso físico o shell al server, puede transferir el repository manualmente a través de un disco duro externo o FTP. Si el informe está vacío, consulte Cómo convertir un depósito de Git desnudo en uno normal en el lugar .

Intenta reconfigurar los parameters de creación del package en el repository de service, especialmente el ~ de ~ valor por defecto de pack.windowmemory para pack.windowmemory .

Yo comenzaría con

 git config pack.windowmemory 1g 

porque usará tanto por núcleo por defecto.