À propos de la limite d’envoi
GitHub a une limite maximale de 2 Gio pour un seul push. Vous pouvez atteindre cette limite lorsque vous essayez de télécharger des référentiels très volumineux pour la première fois, d’importer des référentiels volumineux à partir d’autres plateformes ou de réécrire l’historique des référentiels volumineux existants.
Si vous atteignez cette limite, vous pourriez voir apparaître l’un des messages d’erreur suivants :
fatal: the remote end hung up unexpectedlyremote: fatal: pack exceeds maximum allowed size
Vous pouvez soit diviser votre fichier d’envoi (push) en plusieurs parties, soit supprimer l’historique Git et recommencer à zéro. Si vous avez effectué une validation unique supérieure à 2 Gio et que vous ne pouvez pas supprimer l’historique Git et commencer à zéro, vous devez effectuer une rebase interactive pour fractionner la validation volumineuse en plusieurs petites.
Fractionnement d’une grande poussée
Vous pouvez éviter d’atteindre la limite en divisant votre envoi en parties plus petites, chacune d’elles devant être de moins de 2 Gio. Si une branche est dans cette limite de taille, vous pouvez la pousser en une seule fois. Toutefois, si une branche est supérieure à 2 Gio, vous devez fractionner la poussée en portions encore plus petites et envoyer seulement quelques commits à la fois.
-
Si vous n’avez pas encore configuré le référentiel distant, ajoutez le référentiel en tant que nouveau référentiel distant. Pour plus d’informations, consultez « Gestion de dépôts distants ».
-
Pour trouver les commits appropriés répartis dans l’historique de la branche principale de votre référentiel local, exécutez la commande suivante :
git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0'Cette commande permet d’afficher chaque 1000ème commit. Vous pouvez augmenter ou diminuer le nombre pour ajuster la taille de l’étape.
-
Envoyez chacun de ces commits à la fois vers votre référentiel hébergé GitHub.
git push REMOTE-NAME +<YOUR_COMMIT_SHA_NUMBER>:refs/heads/BRANCH-NAMESi le message
remote: fatal: pack exceeds maximum allowed sizes’affiche, réduisez la taille de l’étape à l’étape 2 et réessayez. -
Suivez le même processus pour chaque commit que vous avez identifié dans l’historique à partir de l’étape 2.
-
S’il s’agit de la première fois que ce référentiel est envoyé vers GitHub, effectuez un envoi miroir final pour vous assurer que toutes les refs restantes ont été envoyées.
git push REMOTE-NAME --mirrorSi cela est encore trop volumineux, vous devrez pousser d’autres branches par étapes en utilisant la même procédure.
Une fois que vous connaissez la procédure, vous pouvez automatiser les étapes 2 à 4 pour simplifier le processus. Par exemple :
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
Reprendre à zéro
Si le référentiel n’a pas d’historique, ou si votre validation initiale seule dépasse 2 Gio et que cela ne vous dérange pas de réinitialiser l’historique Git, vous pouvez également commencer à partir de zéro.
-
Sur votre copie locale, supprimez le dossier masqué
.gitpour supprimer l’historique Git précédent et le convertir en dossier normal contenant des fichiers. -
créer un dossier vide.
-
Exécutez
git initetgit lfs installdans le nouveau dossier, puis ajoutez le nouveau référentiel GitHub vide en tant que distant. -
Si vous utilisez déjà Stockage Fichiers volumineux Git et que toutes les règles de suivi Git LFS que vous souhaitez utiliser sont déjà répertoriées dans le fichier
.gitattributesde l’ancien dossier, ce fichier devrait être le premier que vous copiez dans le nouveau dossier. Vous devez vous assurer que les règles de suivi sont en place avant d’ajouter d’autres fichiers, afin qu’il n’y ait aucune chance que les données Git LFS soient validées dans le stockage Git standard.Si vous n’utilisez pas encore Git LFS, vous pouvez ignorer cette étape ou définir les règles de suivi que vous voulez utiliser dans le fichier
.gitattributesdu nouveau dossier avant de copier d’autres fichiers. Pour plus d’informations, consultez « Configuration de Git Large File Storage ». -
Déplacez des lots de fichiers inférieurs à 2 Gio de l’ancien dossier vers le nouveau dossier. Une fois chaque lot déplacé, créez un commit et envoyez-le avant de déplacer le lot suivant. Vous pouvez adopter une approche prudente et vous limiter à environ 2 Gio. Sinon, si vous avez un dossier contenant des fichiers destinés à Git LFS, vous pouvez ignorer ces fichiers lorsque vous envisagez la limite de 2 Gio par lot.
Une fois l’ancien dossier vide, le référentiel GitHub devrait tout contenir. Si vous utilisez Git LFS, tous les fichiers destinés à Git LFS doivent être poussés vers le stockage Git LFS.