Supprimer le répertoire de dépôt distant après l'ajout.gitignore

je me suis engagé et j'ai poussé un annuaire à github. Après cela, j'ai modifié le fichier .gitignore en ajoutant un répertoire qui devrait être ignoré. Tout fonctionne bien, mais le répertoire (maintenant ignoré) reste sur github.

Comment supprimer ce répertoire de github et l'historique du dépôt?

458
demandé sur melpomene 2011-10-28 13:08:08

7 réponses

les règles de votre fichier .gitignore ne s'appliquent qu'aux fichiers non tracés. Puisque les fichiers de ce répertoire ont déjà été engagés dans votre dépôt, vous devez les décompacter, créer une propagation, et pousser cela à GitHub:

git rm -r --cached some-directory
git commit -m 'Remove the now ignored directory "some-directory"'
git push origin master

vous ne pouvez pas supprimer le fichier de votre historique sans réécrire l'historique de votre dépôt - vous ne devriez pas faire cela si quelqu'un d'autre travaille avec votre dépôt, ou si vous l'utilisez depuis plusieurs ordinateurs. Si vous avez encore envie de faire cela, vous pouvez utiliser git filter-branch réécrire l'histoire il est un guide utile ici .

de plus, notez que la sortie de git rm -r --cached some-directory ressemblera à quelque chose comme:

rm 'some-directory/product/cache/1/small_image/130x130/small_image.jpg'
rm 'some-directory/product/cache/1/small_image/135x/small_image.jpg'
rm 'some-directory/.htaccess'
rm 'some-directory/logo.jpg'

le rm est une rétroaction de git sur le dépôt; les fichiers sont toujours dans le répertoire de travail.

811
répondu Mark Longair 2012-06-19 20:52:23

je fais ceci:

git rm --cached `git ls-files -i --exclude-from=.gitignore` 
git commit -m 'Removed all files that are in the .gitignore' 
git push origin master

qui supprimera tous les fichiers / dossiers qui sont dans votre git ignorer, en enregistrant vous devez choisir chacun manuellement


cela semble avoir cessé de fonctionner pour moi, je le fais maintenant:

 git rm -r --cached . 
 git add .
 git commit -m 'Removed all files that are in the .gitignore' 
 git push origin master
207
répondu Blundell 2015-07-24 17:54:14

Comme par ma Réponse ici: Comment supprimer un répertoire de dépôt git?

pour supprimer le dossier/répertoire uniquement à partir du dépôt git et non pas à partir de l'essai local 3 étapes simples.


étapes pour supprimer le répertoire

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

étapes pour ignorer ce dossier dans next commits

pour ignorer ce dossier de la prochaine commit, créer un fichier en racine nommé .gitignore et mets ce nom de dossier dedans. Vous pouvez mettre autant que vous voulez

.gitignore fichier sera ressembler à ceci

/FolderName

remove directory

35
répondu eirenaios 2017-05-23 12:26:36

la réponse de Blundell devrait marcher, mais pour une raison étrange, ça n'a rien à voir avec moi. J'ai dû tuyau d'abord les noms de fichiers envoyés par la première commande dans un fichier et ensuite une boucle sur ce fichier et supprimer ce fichier un par un.

git ls-files -i --exclude-from=.gitignore > to_remove.txt
while read line; do `git rm -r --cached "$line"`; done < to_remove.txt
rm to_remove.txt
git commit -m 'Removed all files that are in the .gitignore' 
git push origin master
4
répondu Chris Aelbrecht 2013-10-30 13:04:14

la première réponse de Blundell n'a pas marché pour moi. Cependant, il m'a montré le droit chemin. J'ai fait la même chose:

> for i in `git ls-files -i --exclude-from=.gitignore`; do git rm --cached $i; done
> git commit -m 'Removed all files that are in the .gitignore'
> git push origin master

je vous conseille de vérifier les fichiers à supprimer d'abord en exécutant la déclaration suivante:

git ls-files -i --exclude-from=.gitignore

j'utilisais un défaut .fichier gitignore pour visual studio et j'ai remarqué qu'il supprimait tous les dossiers log et bin dans le projet qui n'était pas mon action prévue.

4
répondu Oncel Umut TURER 2017-04-07 12:14:26

Note: Cette solution ne fonctionne qu'avec GitHub Desktop GUI .

en utilisant GitHub Desktop GUI c'est très simple.

  1. déplacer le dossier à un autre endroit (pour sortir du dossier du projet) Temporairement.

  2. éditez votre fichier .gitignore et supprimez l'entrée du dossier qui serait supprimer le dépôt principal sur le github page.

  3. s'Engager et de Synchroniser le dossier du projet.

  4. déplacer le dossier dans le dossier de projet

  5. Ré-éditer "151900920 de fichier".

C'est tout.

2
répondu efkan 2016-12-21 09:55:27

si vous travaillez à partir de PowerShell, essayez la commande suivante en une seule commande.

PS MyRepo> git filter-branch --force --index-filter
>> "git rm --cached --ignore-unmatch -r .\\path\\to\\directory"
>> --prune-empty --tag-name-filter cat -- --all

puis git push --force --all .

Documentation: https://git-scm.com/docs/git-filter-branch

0
répondu Shaun Luttin 2016-07-25 22:09:10