Skip to main content

Solución de problemas del límite de inserción de 2 GB

Obtén información sobre cómo solucionar el límite de inserción de 2 GB.

Acerca del límite de inserción

GitHub tiene un límite máximo de 2 GB para una sola inserción. Puedes alcanzar este límite al intentar cargar repositorios muy grandes por primera vez, importar repositorios grandes desde otras plataformas o al intentar volver a escribir el historial de repositorios existentes de gran tamaño.

Si alcanzas este límite, puedes ver uno de los siguientes mensajes de error:

  • fatal: the remote end hung up unexpectedly
  • remote: fatal: pack exceeds maximum allowed size

Puedes dividir la inserción en partes más pequeñas o eliminar el historial de Git y empezar desde cero. Si has realizado una única confirmación superior a 2 GB y no puedes eliminar el historial de Git y empezar desde cero, tendrás que realizar una fusión mediante cambio de base interactiva para dividir la confirmación grande en varias más pequeñas.

División de una inserción grande

Puedes evitar alcanzar el límite dividiendo la inserción en partes más pequeñas, cada una de las cuales debe tener un tamaño inferior a 2 GB. Si una rama no supera este límite de tamaño, puedes insertarla toda a la vez. Sin embargo, si una rama tiene más de 2 GB, deberás dividir la inserción en partes aún más pequeñas e insertar solo algunas confirmaciones a la vez.

  1. Si aún no has configurado el repositorio remoto, agrega el repositorio como un nuevo repositorio remoto. Para más información, consulta Administrar repositorios remotos.

  2. Para buscar confirmaciones adecuadas distribuidas en el historial de la rama principal del repositorio local, ejecuta el siguiente comando:

    git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0'
    

    Este comando revela cada confirmación número 1000. Puedes aumentar o disminuir el número para ajustar el tamaño del paso.

  3. Inserta cada una de estas confirmaciones de una en una en el repositorio hospedado de GitHub.

    git push REMOTE-NAME +<YOUR_COMMIT_SHA_NUMBER>:refs/heads/BRANCH-NAME
    

    Si ves el mensaje remote: fatal: pack exceeds maximum allowed size, reduce el tamaño del paso en el paso 2 e inténtalo de nuevo.

  4. Sigue el mismo proceso para cada confirmación que hayas identificado en el historial del paso 2.

  5. Si es la primera vez que se inserta este repositorio en GitHub, realiza una inserción de reflejo final para asegurarte de que se insertan las referencias restantes.

    git push REMOTE-NAME --mirror
    

    Si sigue siendo demasiado grande, deberás insertar otras ramas en varias fases mediante los mismos pasos.

Una vez que estés familiarizado con el procedimiento, puedes automatizar los pasos 2 a 4 para simplificar el proceso. Por ejemplo:

step_commits=$(git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0')
echo "$step_commits" | while read commit message; do git push REMOTE-NAME +$commit:refs/heads/BRANCH-NAME; done

Comienzo desde cero

Si el repositorio no tiene ningún historial o la confirmación inicial era superior a 2 GB por sí sola y no te importa restablecer el historial de Git, también puedes empezar desde cero.

  1. En la copia local, elimina la carpeta oculta .git para quitar todo el historial de Git anterior y convertirlo de nuevo en una carpeta normal llena de archivos.

  2. para crear una nueva carpeta vacía.

  3. Ejecutea git init y git lfs install en la nueva carpeta y agrega el nuevo repositorio vacío GitHub como un repositorio remoto.

  4. Si ya usas Almacenamiento de archivos de gran tamaño de Git y tienes todas las reglas de seguimiento de Git LFS que piensas usar ya enumeradas en el archivo .gitattributes de la carpeta antigua, ese debe ser el primer archivo que copies en la nueva carpeta. Debes asegurarte de que las reglas de seguimiento están donde deben antes de agregar cualquier otro archivo, de modo que no haya ninguna posibilidad de que Git LFS se confirme en el almacenamiento de Git normal.

    Si aún no usas Git LFS, puedes omitir este paso o configurar las reglas de seguimiento que quieres usar en el archivo .gitattributes de la nueva carpeta antes de copiar cualquier otro archivo. Para más información, consulta Configurar el almacenamiento de archivos Git de gran tamaño.

  5. Mueve lotes de archivos menores de 2 GB de la carpeta anterior a la nueva carpeta. Después de mover cada lote, crea una confirmación e insértala antes de mover el siguiente lote. Puedes adoptar un enfoque cauteloso y ceñirte a unos 2 GB. Como alternativa, si tienes una carpeta con archivos destinados a Git LFS, puedes omitir esos archivos al considerar el límite de 2 GB por lote.

Una vez que la carpeta antigua está vacía, el repositorio GitHub debe contener todo. Si usas Git LFS, todos los archivos destinados a Git LFS deben insertarse en el almacenamiento de Git LFS.