1611 votes

Comment supprimer un répertoire du dépôt git ?

J'ai 2 répertoires sur mon dépôt GitHub. J'aimerais en supprimer un. Comment puis-je le faire sans supprimer et recréer l'ensemble du dépôt ?

1 votes

Y a-t-il des fichiers dans les répertoires ?

5 votes

@Iarsmans : Oui, 6 fichiers. Les deux répertoires sont identiques sauf que l'un est en majuscule, l'autre en minuscule.

16 votes

Vous avez seulement besoin : git rm -r --cached folder_name

3006voto

karmakaze Points 4615

Supprimer le répertoire de git et local

Vous pouvez vérifier 'master' avec les deux répertoires ;

git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)

Suppression du répertoire de git mais PAS du répertoire local

Comme mentionné dans les commentaires, ce que vous voulez généralement faire est de supprimer ce répertoire de git mais pas de le supprimer entièrement du système de fichiers (local).

Dans ce cas, utilisez :

git rm -r --cached myFolder

12 votes

J'ai eu exactement la même situation. Lorsque j'ai essayé git rm -r myFolder cela a fonctionné, mais a également supprimé tout ce qui se trouvait dans le répertoire "MyFolder". J'ai dû rétablir tout ce qui se trouvait dans le répertoire "MyFolder" et ensuite valider.

288 votes

@Justin Pour ne supprimer que de git et laisser le système de fichiers tel quel, utilisez git rm -r --cached myFolder

0 votes

Comment le supprimer du github pour le web ?

450voto

Eirenaios Points 1403

Pour supprimer un dossier/répertoire uniquement du dépôt git et pas du local, essayez 3 commandes simples.


Étapes pour supprimer le répertoire

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

Etapes pour ignorer ce dossier dans les prochains commits

Pour ignorer ce dossier lors des prochains commits, créez un fichier dans le dossier Root (répertoire principal du projet où le git est initialisé) nommé .gitignore et mettez ce nom de dossier dedans. Vous pouvez ignorer autant de fichiers/dossiers que vous le souhaitez.

.gitignore ressemblera à ceci

/FolderName

remove directory

1 votes

Vous devrez également faire le git rm -r --cached FolderName git commit -m "Removed folder from repository" sur votre autre ordinateur et ensuite faire un pull pour garder la synchronisation.

1 votes

Cela supprimera-t-il le répertoire depuis le moment où il a été ajouté au référentiel jusqu'à maintenant ? Ou est-ce qu'il suffit de supprimer le répertoire et de le réinsérer dans le dépôt .git ?

0 votes

Pourquoi ne pas simplement faire un rm -rf FolderName; git add -A; git commit -m 'removed FolderName ?

88voto

cmcculloh Points 11040

Si, pour une raison quelconque, ce que karmakaze a dit ne fonctionne pas, vous pouvez essayer de supprimer le répertoire que vous voulez en utilisant ou avec votre navigateur de système de fichiers (ex. Dans l'explorateur de fichiers de Windows). Après avoir supprimé le répertoire, lancez la commande :
git add -A
et ensuite
git commit -m 'deleting directory'
et ensuite
git push origin master .

5 votes

Cela a fonctionné pour moi. Pouvez-vous expliquer l'argument -A ?

2 votes

@Arun -A est l'abréviation de --all et ajoute les changements de tous les fichiers suivis et non suivis.

31voto

Skyborg Points 220

J'avais déjà validé le dossier auparavant et je veux supprimer le répertoire dans l'historique également.

J'ai fait ce qui suit :

Ajouter un dossier à .gitignore :

echo Folder_Name/ >> .gitignore

Supprimer de tous les commits :

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all

supprimer les refs des anciens commits :

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

Assurez-vous que toutes les anciennes références sont entièrement supprimées

rm -Rf .git/logs .git/refs/original

Effectuer un ramassage des déchets

git gc --prune=all --aggressive

pousser vos changements vers le référentiel en ligne :

git push

Vous avez terminé ici.

Mais vous pouvez utiliser la commande suivante pour pousser tous les changements dans toutes les branches : Mais faites attention avec cette commande !

git push origin --all --force
git push origin --tags --force

Après cela, le dossier a été supprimé de git, mais n'a pas été supprimé du disque local.

28voto

Breen ho Points 373

Vous pouvez essayer ceci : git rm -rf <directory_name>

Cela forcera la suppression du répertoire.

13 votes

Cela supprimera également le répertoire local

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X