Question Supprimer le répertoire du référentiel distant après les avoir ajoutés à .gitignore


Je me suis engagé et poussé un répertoire à github. Après cela, j'ai modifié le .gitignore fichier 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?


437
2017-10-28 09:08


origine


Réponses:


Les règles dans votre .gitignore fichier s'applique uniquement aux fichiers non suivis. Étant donné que les fichiers sous ce répertoire ont déjà été validés dans votre référentiel, vous devez les désassembler, créer un commit et le pousser vers 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 référentiel. Vous ne devez pas le faire si quelqu'un d'autre travaille avec votre référentiel ou si vous l'utilisez à partir de plusieurs ordinateurs. Si vous voulez toujours faire cela, vous pouvez utiliser git filter-branch réécrire l'histoire - il y a un guide utile à cela ici.

De plus, notez la sortie de git rm -r --cached some-directory sera 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 la rétroaction de git à propos du dépôt; les fichiers sont toujours dans le répertoire de travail.


779
2017-10-28 09:12



Je fais ça:

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 va supprimer tous les fichiers / dossiers qui sont dans votre git ignorer, en sauvegardant 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

200
2018-02-10 12:39



Selon ma réponse ici: Comment supprimer un répertoire du dépôt git?

Pour supprimer le dossier / répertoire uniquement du référentiel git et non du local essayez 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 les prochains commits

Pour ignorer ce dossier à partir des validations suivantes, créez un fichier en racine nommé .gitignore   et mettez le nom de ce dossier dedans. Vous pouvez en mettre autant que vous voulez

.gitignore le fichier ressemblera à ceci

/FolderName

remove directory


32
2017-08-24 12:19



La réponse de Blundell devrait fonctionner, mais pour une raison étrange, cela ne me concernait pas. J'ai dû canaliser d'abord les noms de fichiers générés par la première commande dans un fichier, puis faire une boucle dans 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
2017-10-30 12:15



La première réponse de Blundell n'a pas fonctionné pour moi. Cependant, il m'a montré la bonne façon. J'ai fait la même chose comme ceci:

> 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 en exécutant l'instruction ci-dessous:

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

J'utilisais un fichier .gitignore par défaut pour Visual Studio et j'ai remarqué qu'il supprimait tous les dossiers journaux et bin du projet, ce qui n'était pas mon intention.


4
2018-04-07 12:14



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

En utilisant Github Desktop GUI c'est très simple.

  1. Déplacez temporairement le dossier sur un autre emplacement (hors du dossier du projet).

  2. Modifier votre .gitignore fichier et supprimer l'entrée de dossier qui serait supprimer référentiel maître sur la page github.

  3. Validez et synchronisez le dossier du projet.

  4. Redéplacez le dossier dans le dossier du projet

  5. Ré-éditer .gitignore fichier.

C'est tout.


2
2017-12-21 09:55



Si vous travaillez avec PowerShell, essayez ce qui suit en tant que commande unique.

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

Alors, git push --force --all.

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


0
2017-07-25 22:09