web-dev-qa-db-fra.com

Échec de la purge du fichier du dépôt Git, impossible de créer une nouvelle sauvegarde

J'ai essayé de supprimer un fichier de mon référentiel distant en exécutant:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

Mais Git se plaint que

Impossible de créer une nouvelle sauvegarde. Une sauvegarde précédente existe déjà dans refs/original /
Forcer l'écrasement de la sauvegarde avec -f
rm: impossible de supprimer /.git-rewrite/backup-refs: autorisation refusée
rm: impossible de supprimer le répertoire /.git-rewrite: répertoire non vide

C'était après avoir déjà supprimé le répertoire .git-rewrite sous Windows.

Comment puis-je supprimer ce fichier? C'est un fichier de 29 Mo assis sur mon référentiel, j'ai donc tout à fait besoin de supprimer le fichier.

J'ai essayé de supprimer le commit dans git rebase -i, mais apparemment parce que le commit a touché beaucoup de fichiers différents, Git se plaint de conflits et j'ai avorté pour être en sécurité.

101
Cardin

Vous avez déjà effectué une opération de branchement de filtre. Après la branche de filtre, Git conserve les références aux anciens commits, au cas où quelque chose se passerait mal.

Vous pouvez les trouver dans .git/refs/original/…. Supprimez ce répertoire et tous les fichiers qu'il contient, ou utilisez le -f flag pour forcer Git à supprimer les anciennes références.

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
197
knittl

Utilisez cette commande pour supprimer la sauvegarde d'origine:

git update-ref -d refs/original/refs/heads/master

Voici Gist que j'ai utilisé pour filtrer la branche de mon dépôt git: https://Gist.github.com/k06a/25a0214c98bc19fd6817

17
k06a

J'ai eu le même problème et la réponse ci-dessus ne l'a pas résolu. Il ne restait aucun répertoire .git/refs/original /. La solution pour moi a été de supprimer le fichier .git/packed-refs.

4
Yaron

Ajoutez une force à la commande de branche de filtre.

2
Adam Dymitruk