2009-02-22 4 views
13

Il semble que mon commit initial consomme 90% de l'espace, car il a accidentellement été créé avec beaucoup de fichiers multimédia. Existe-t-il un moyen de supprimer uniquement le premier commit des dépôts locaux et distants, ou devrais-je laisser celui-ci être?Puis-je supprimer la validation initiale d'un dépôt Git?

+1

Il y a aussi 'git rebase --root'. Voir la réponse SO ci-dessous pour plus de détails: http://stackoverflow.com/questions/2246208/change-first-commit-of-project-with-git – MKroehnert

Répondre

20

Il semble que vous ayez déjà partagé le référentiel avec un certain nombre d'autres utilisateurs. Si c'est le cas, alors vous devriez probablement vivre avec.

Si vous contrôlez tous les clones, vous pouvez réécrire l'historique au-dessus d'un commit racine modifié avec les fichiers non voulus supprimés. Notez que vous ne devriez pas faire cela si d'autres développeurs ont déjà travaillé à partir de cette branche.

Si vous êtes en train de réécrire l'historique, vous pouvez essayer ce qui suit. Notez que parce que git conserve les logs de l'endroit où votre commit HEAD a été récemment (reflogs), les objets volumineux ne disparaîtront pas immédiatement de votre dépôt, ou d'autres dépôts qui en ont déjà, même si vous essayez git gc ou git gc --prune. Il veillera toutefois à ce que les nouveaux clones ne finissent pas par récupérer les objets volumineux dans le cadre de l'historique de la branche principale.

En supposant que votre répertoire de travail est « propre »:

# Go back the initial commit 
git checkout <SHA1_of_old_root> 

# Clean up the index to remove unwanted files, e.g. using git rm <files> 
# ... 

# Amend the initial commit with the new tree. Note the sha1 of the new commit 
git commit --amend 

# Go back to the master branch 
git checkout master 

# Re-apply all the commits onto the new root 
git rebase --onto <SHA1_of_new_root> <SHA1_of_old_root> 
2

vous pouvez également utiliser git filter-branch pour supprimer les fichiers Contrevenants (voir la section Exemples), mais il est en train de réécrire l'histoire aussi. Donc, toute personne qui a basé son code sur votre ancien historique aurait une mauvaise surprise ...

+1

filter-branch se débrouillera aussi mieux (ou du moins nécessitera moins d'interaction) si les modifications apportées aux fichiers indésirables ont été suivies depuis la validation de la racine. –

Questions connexes