Préface : lors de la soumission et du transfert de modifications locales vers l'entrepôt, un fichier volumineux a été soumis par erreur, ce qui a entraîné un rapport d'erreur indiquant que le fichier push est trop volumineux. Il est donc nécessaire de supprimer le fichier volumineux qui a été validé avant de le transmettre.
Si vous connaissez le chemin du fichier ou du dossier à supprimer, vous pouvez commencer à partir de l'étape 4
1. Effectuer une opération gc sur l'entrepôt
$ git gc
2. Interroger des fichiers volumineux
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
Notez que ceci est interrogé à partir du dossier .git, il doit donc être exécuté dans le répertoire racine de l'entrepôt
Le résultat affiché est un fichier volumineux et les 6 premiers identifiants sont l'identifiant de soumission du fichier.
3. Obtenez le nom du fichier correspondant à l'identifiant
git rev-list --objects --all | grep id名称
Exemple : git rev-list --objects --all | grep 78b35d
Après l'identifiant se trouve le chemin complet du fichier
4. Supprimez le fichier (si vous connaissez le chemin du fichier, vous pouvez directement exécuter la commande suivante)
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch 文件名' --tag-name-filter cat -- --all
comme:
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch CustomPhysics2DIntProject2022.3/Build/01 - Version/UnityPlayer.dll' --tag-name- filtre chat -- --tous
Si vous souhaitez supprimer un répertoire, vous pouvez directement renseigner le répertoire, comme par exemple :
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch CustomPhysics2DIntProject2022.3/Build' --tag-name-filter cat -- --all
Si une exception se produit : Impossible de réécrire les branches : vous avez des modifications non planifiées.
Exécuter une commande :
git stash
supprimer à nouveau après
5. Supprimez le pointeur vers l'ancien commit
rm -rf .git/refs/original/
6. Supprimer le journal
rm -rf .git/logs/
7. Abandonnez la possibilité de toute récupération d'objets non associés
git reflog expire --expire=now --all
8. Nettoyez les déchets et reconditionnez
git repack -A -d //重新打包
git gc --aggressive --prune=now //清理垃圾,重新打包
9. Poussez la télécommande de force
git push --force
git push --force --all
10. Nettoyage de plusieurs branches
git checkout branchName //切换分支,多个分支需要分别清理