2009-10-20 7 views
8

J'ai accidentellement commis de gros fichiers wav de test dans mon dépôt et ils utilisent beaucoup d'espace sur mon compte Github. Comment puis-je supprimer ces fichiers de l'historique?Comment réduire la taille d'un repo sur Github

Remarque: ces fichiers ont été validés il y a un certain temps et ne sont pas dans la validation HEAD.

+0

La vraie question va probablement ici à réécrire l'histoire que d'autres ont déjà tiré - il y a beaucoup de messages ici, ainsi que des choses que vous pouvez trouver avec Google traitant de ce problème particulier, outre la section de page de manuel que j'ai mentionnée dans ma réponse. – Cascabel

+1

Eh bien, je suis actuellement le seul committer sur le projet, donc cela rend les choses un peu plus faciles à cet égard. –

Répondre

11

Il n'y a aucun moyen de les supprimer sans modifier l'historique, donc si quelqu'un a apporté les modifications, vous devrez peut-être faire face à ce désordre - voir recovering from upstream rebase dans man git-rebase. Cela peut être assez mauvais, en fonction de votre flux de travail - d'une manière ou d'une autre, vous devrez probablement faire prendre conscience à tous qu'ils doivent passer à la «nouvelle» branche maîtresse, en réajustant tout travail en cours.

Si l'essai COMMIT étaient encore à la pointe, vous pouvez réinitialiser à engager avant d':

git reset --hard HEAD^ 

ou modifier:

git rm test.wav 
git commit --amend 

Mais comme il est plus à la pointe, votre meilleur pari est probablement faire sans doute avec un rebasage interactif:

git rebase -i <commit-before-mistake> 

Change « pick » à « modifier » sur la commettre que vous voulez réparer, alors faites-le! (Ou même enlever toute commettras si c'est correct) *

Une fois que vous avez fini de faire celui de ces que vous choisissez, vous devrez forcer la poussée, car il est plus une avance rapide:

git push -f origin 

* Si vous avez par la suite validé des modifications sur ces fichiers, vous rencontrerez des problèmes à mesure que vous continuerez à rebaser. Ils devraient être simples à traiter, puisque vous voulez juste que les fichiers disparaissent. Bien sûr, s'il y a eu une centaine de commits depuis ce temps-là, cela peut causer des conflits, vous pouvez regarder git-filter-branch. L'exemple pertinent de la man page est:

git filter-branch --index-filter ’git rm --cached --ignore-unmatch filename’ HEAD 

2
  1. Retirez-le de votre historique local sur la succursale où vous l'avez engagé. Une façon de faire est d'utiliser git commit --amend si c'est votre commit HEAD; un autre est git rebase --interactive.
  2. Forcez la branche mise à jour vers github.

    git push --force github 
    

    (où github est le nom de votre télécommande pour GitHub).

Ceci le supprimera de l'historique actif. Pour réellement récupérer l'espace, GitHub devra faire une collecte de place. Je ne suis pas sûr d'une façon de le faire explicitement, s'ils ne le font pas automatiquement. Vous devrez peut-être déposer une demande de support.

+6

Garbage GitHub collecte après chaque opération de référentiel. –

+0

@ JörgWMittag - en êtes-vous sûr? J'ai poussé les branches après les avoir nettoyées des vieux gros fichiers et sur mon github mon repo est toujours de la même taille. localement, le repo a rétréci. – isapir

Questions connexes