J'ai commis et poussé un répertoire vers 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 (désormais ignoré) reste sur github.
Comment supprimer ce répertoire de github et de l'historique du référentiel?
Réponses:
Les règles de votre
.gitignore
fichier s'appliquent uniquement aux fichiers non suivis. Étant donné que les fichiers de ce répertoire ont déjà été validés dans votre référentiel, vous devez les décompresser, créer un commit et le pousser vers GitHub:Vous ne pouvez pas supprimer le fichier de votre historique sans réécrire l'historique de votre référentiel - vous ne devriez 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 le faire, vous pouvez utiliser
git filter-branch
pour réécrire l'historique - il y a un guide utile ici .De plus, notez que la sortie de
git rm -r --cached some-directory
sera quelque chose comme:Il
rm
s'agit des commentaires de git sur le référentiel; les fichiers sont toujours dans le répertoire de travail.la source
-r
et--cached
. Merci.-r
signifie récursif, nécessaire si vous faites des répertoires entiers.--cached
remplace le comportement normal de git de les supprimer du répertoire de travail et de planifier la suppression pour la validation, et fait que git ne fonctionne que sur la zone de préparation prête à la validation. C'est ainsi que vous dites à git que vous souhaitez conserver vos copies locales des fichiers.git reset name_of_file
pour que ce qui est décrit ci-dessus fonctionneJe fais ça:
Ce qui supprimera tous les fichiers / dossiers qui sont dans votre git ignorer, vous devez donc les sélectionner manuellement
Cela semble avoir cessé de fonctionner pour moi, je fais maintenant:
la source
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
Selon ma réponse ici: Comment supprimer un répertoire du référentiel 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
Étapes pour ignorer ce dossier dans les prochains validations
Le fichier .gitignore ressemblera à ceci
la source
La première réponse de Blundell n'a pas fonctionné pour moi. Mais cela m'a montré le bon chemin. J'ai fait la même chose comme ça:
Je vous conseille de vérifier d'abord les fichiers à supprimer en exécutant l'instruction ci-dessous:
J'utilisais un fichier .gitignore par défaut pour Visual Studio et j'ai remarqué qu'il supprimait tous les journaux et les dossiers bin du projet, ce qui n'était pas mon action prévue.
la source
Remarque: Cette solution fonctionne uniquement avec l' interface graphique Github Desktop .
En utilisant l' interface graphique de Github Desktop, c'est très simple.
Déplacez le dossier vers un autre emplacement (pour sortir du dossier du projet) temporairement.
Modifiez votre
.gitignore
fichier et supprimez l'entrée du dossier qui serait supprimer le référentiel maître sur la page github.Validez et synchronisez le dossier du projet.
Déplacer le dossier dans le dossier du projet
Rééditez le
.gitignore
fichier.C'est tout.
la source
La réponse de Blundell devrait fonctionner, mais pour une raison bizarre, cela ne me concerne pas. J'ai dû d'abord canaliser les noms de fichiers générés par la première commande dans un fichier, puis parcourir ce fichier et supprimer ce fichier un par un.
la source
Si vous devez également purger les fichiers nouvellement ignorés de l'historique de validation de la branche ou si vous ne souhaitez pas que les fichiers nouvellement ignorés soient supprimés des futurs pulls , consultez cette réponse .
la source
Si vous travaillez à partir de PowerShell, essayez ce qui suit en tant que commande unique.
Ensuite,
git push --force --all
.Documentation: https://git-scm.com/docs/git-filter-branch
la source
git filter-branch
différente de l'utilisationgit rm
? Je pensais à l'origine que je devais utiliser une version degit filter-branch
mais la plupart des commentaires ici recommandent de l'utilisergit rm
. D'après ce que je comprends,git rm
ne le supprime que du répertoire de travail et de l'index en cours. Mais si ses multiples validations ajoutées auparavant, il sera toujours dans le référentiel.git rm
supprimera le fichier de la dernière validation à l'avenir.git filter-branch
nous permet de le supprimer de toute l'histoire. Voir aussi: help.github.com/articles/…