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.
-
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.
-
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.
-
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. -
Sigue el mismo proceso para cada confirmación que hayas identificado en el historial del paso 2.
-
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.
-
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. -
para crear una nueva carpeta vacía.
-
Ejecutea
git init
ygit lfs install
en la nueva carpeta y agrega el nuevo repositorio vacío GitHub como un repositorio remoto. -
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. -
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.