Comment supprimer un répertoire du référentiel git?
1236
J'ai 2 répertoires sur mon référentiel GitHub. Je voudrais supprimer l'un d'eux. Comment pourrais-je faire cela sans supprimer et recréer le référentiel entier?
@Iarsmans: Oui 6 fichiers. Les deux répertoires sont identiques, sauf que l'un est en majuscules, un autre en minuscules.
Sahat Yalkabov
Réponses:
2328
Supprimer le répertoire de git et local
Vous pouvez extraire «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)
Supprimer le répertoire de git mais PAS 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)
J'avais la même situation exacte. Lorsque j'ai essayé, git rm -r myFoldercela a fonctionné, mais j'ai également tout supprimé du répertoire "MyFolder". J'ai dû tout rétablir dans le répertoire "MyFolder", puis valider.
Justin
240
@Justin Pour supprimer uniquement de git et laisser le système de fichiers tel git rm -r --cached myFolder
quel
32
Le message d'erreur que j'obtiens est: fatal: pathspec 'directory' ne correspond à aucun fichier.
user2441441
3
@ user2441441 J'ai rencontré cette erreur lorsque j'essayais de supprimer un dossier / fichier qui n'était pas du tout ajouté au
dépôt
3
git rm -r --cached directory/supprime uniquement de git tracké, mais la structure du référentiel reste.
Néstor
287
Pour supprimer le dossier / répertoire uniquement du référentiel git et non du local, essayez 3 commandes simples.
Étapes pour ignorer ce dossier dans les prochains validations
Pour ignorer ce dossier à partir des validations suivantes, créez un fichier à la racine nommé .gitignore
et mettez-y le nom de ce dossier. Vous pouvez en mettre autant que vous le souhaitez
Vous devrez également faire le git rm -r --cached FolderName git commit -m "Dossier supprimé du référentiel" sur votre autre ordinateur, puis faire un pull pour le garder synchronisé.
Simon
1
Cela supprimera-t-il le répertoire du point où il a été ajouté au référentiel jusqu'à présent? Ou s'agit-il simplement de supprimer le répertoire et de le réengager dans le dépôt .git?
alpha_989
1
Génial! Travail!
BeingCoders
2
Bien expliqué, belle réponse
Rakshit Shah
1
bien joué. Sur ma machine, la troisième étape ne fonctionne pas. Mais cela fonctionne s'il est changé en $ git push
Hong
82
Si, pour une raison quelconque, ce que Karmakaze a dit ne fonctionne pas, vous pouvez essayer de supprimer le répertoire que vous souhaitez utiliser ou avec le navigateur de votre système de fichiers (par exemple, dans l'Explorateur de fichiers Windows). Après avoir supprimé le répertoire, lancez la commande: git add -A
puis git commit -m 'deleting directory'
puis puis git push origin master.
Si vous supprimez les fichiers du répertoire (avec git rmcomme les autres réponses l'expliquent), le répertoire n'existe plus en ce qui concerne git. Vous ne pouvez pas valider un répertoire vide, ni en supprimer un.
C'est différent de la subversion où vous devez explicitement svn rm emptyfolder/, et c'est d'ailleurs pourquoi la manpage pour git se décrit comme "le stupide tracker de contenu"
Actuellement, la conception de l'index git (zone de transit) ne permet que la liste des fichiers, et personne suffisamment compétent pour effectuer la modification pour autoriser les répertoires vides ne s'est suffisamment soucié de cette situation pour y remédier.
Les répertoires sont ajoutés automatiquement lors de l'ajout de fichiers à l'intérieur. Autrement dit, les répertoires ne doivent jamais être ajoutés au référentiel et ne sont pas suivis par eux-mêmes.
Vous pouvez dire " git add <dir>" et il y ajoutera des fichiers.
Si vous avez vraiment besoin qu'un répertoire existe dans les caisses, vous devez y créer un fichier. .gitignore fonctionne bien à cet effet; vous pouvez le laisser vide ou remplir les noms des fichiers que vous prévoyez d'afficher dans le répertoire.
je voulais supprimer un répertoire vide (dossier) que j'ai créé, git ne peut pas le supprimer, après quelques recherches, j'ai appris que Git ne suit pas les répertoires vides. Si vous avez un répertoire vide dans votre arborescence de travail, vous devez simplement le supprimer avec
Vous pouvez utiliser l'arbre source Attlasian (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Sélectionnez simplement les fichiers dans l'arborescence et appuyez sur le bouton "Supprimer" en haut. Les fichiers seront supprimés du référentiel local et de la base de données git locale. Ensuite, validez, puis appuyez.
C'est ce que je fais aussi. Cela a rendu la tâche très simple, cependant, apprendre les commandes git est une bonne chose à savoir.
Micah Montoya
1
Un de mes collègues a suggéré BFG Repo-Cleaner que je trouve puissant. Il s'agit non seulement de supprimer les données indésirables, mais également de nettoyer votre référentiel de toute information de validation associée.
Mais maintenant, Git n'est pas au courant de ce nouveau répertoire, car Git garde la trace des fichiers et non des répertoires RÉPERTOIRE
git status
Git ne sera pas au courant de la modification que nous avons apportée, nous ajoutons donc un .keepfichier caché pour rendre Git conscient de cette nouvelle modification.
touch /YOUR-directory/.keep
Maintenant, si vous touchez, git statusGit sera au courant des changements.
Et si vous souhaitez supprimer le répertoire, vous devez utiliser cette commande.
rm -r <YOUR-DIRECTORY>
Et si vous avez vérifié en utilisant git status, vous verrez que le répertoire a été supprimé.
Réponses:
Supprimer le répertoire de git et local
Vous pouvez extraire «master» avec les deux répertoires;
Supprimer le répertoire de git mais PAS 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:
la source
git rm -r myFolder
cela a fonctionné, mais j'ai également tout supprimé du répertoire "MyFolder". J'ai dû tout rétablir dans le répertoire "MyFolder", puis valider.git rm -r --cached myFolder
git rm -r --cached directory/
supprime uniquement de git tracké, mais la structure du référentiel reste.Pour supprimer le dossier / répertoire uniquement du référentiel git et non du local, essayez 3 commandes simples.
Étapes pour supprimer le répertoire
Étapes pour ignorer ce dossier dans les prochains validations
Le fichier .gitignore ressemblera à ceci
la source
Si, pour une raison quelconque, ce que Karmakaze a dit ne fonctionne pas, vous pouvez essayer de supprimer le répertoire que vous souhaitez utiliser ou avec le navigateur de votre système de fichiers (par exemple, dans l'Explorateur de fichiers Windows). Après avoir supprimé le répertoire, lancez la commande:
git add -A
puis
git commit -m 'deleting directory'
puis puis
git push origin master
.la source
Vous pouvez essayer ceci:
git rm -rf <directory_name>
Cela forcera la suppression du répertoire.
la source
Si vous supprimez les fichiers du répertoire (avec
git rm
comme les autres réponses l'expliquent), le répertoire n'existe plus en ce qui concerne git. Vous ne pouvez pas valider un répertoire vide, ni en supprimer un.C'est différent de la subversion où vous devez explicitement
svn rm emptyfolder/
, et c'est d'ailleurs pourquoi laman
page pour git se décrit comme "le stupide tracker de contenu"Une réponse sur "Comment ajouter un répertoire vide à un référentiel git" renvoie à la FAQ à ce sujet :
la source
J'avais déjà validé le dossier auparavant et je souhaite également supprimer le répertoire de l'historique.
J'ai fait ce qui suit:
Ajouter un dossier à
.gitignore
:Supprimer de tous les commits:
supprimez les références des anciens commits:
Assurez-vous que toutes les anciennes références sont complètement supprimées
Effectuer une collecte des ordures
vous pousser les modifications dans le référentiel en ligne:
Vous avez terminé ici.
Mais vous pouvez faire ce qui suit pour pousser toutes les modifications à toutes les branches avec: Mais soyez prudent avec cette commande!
Après cela, le dossier a été supprimé de git, mais n'a pas été supprimé du disque local.
la source
pour supprimer des dossiers vides
je voulais supprimer un répertoire vide (dossier) que j'ai créé, git ne peut pas le supprimer, après quelques recherches, j'ai appris que Git ne suit pas les répertoires vides. Si vous avez un répertoire vide dans votre arborescence de travail, vous devez simplement le supprimer avec
Il n'est pas nécessaire d'impliquer Git.
la source
Accédez à votre répertoire git, puis tapez la commande suivante: rm -rf < nom du répertoire >
Après avoir supprimé le répertoire, validez les modifications en: git commit -m "Your Commit Message"
Ensuite, poussez simplement les modifications sur le répertoire GIT distant: git push origin < nom de la branche >
la source
Vous pouvez supprimer le dossier localement, puis pousser, comme suit:
la source
J'utilise généralement
git add --all
pour supprimer des fichiers / dossiers des référentiels distantsmaster
peut être remplacé par n'importe quelle autre branche du référentiel.la source
Vous pouvez utiliser l'arbre source Attlasian (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Sélectionnez simplement les fichiers dans l'arborescence et appuyez sur le bouton "Supprimer" en haut. Les fichiers seront supprimés du référentiel local et de la base de données git locale. Ensuite, validez, puis appuyez.
la source
Un de mes collègues a suggéré BFG Repo-Cleaner que je trouve puissant. Il s'agit non seulement de supprimer les données indésirables, mais également de nettoyer votre référentiel de toute information de validation associée.
la source
Pour ajouter un nouveau répertoire:
Mais maintenant, Git n'est pas au courant de ce nouveau répertoire, car Git garde la trace des fichiers et non des répertoires RÉPERTOIRE
Git ne sera pas au courant de la modification que nous avons apportée, nous ajoutons donc un
.keep
fichier caché pour rendre Git conscient de cette nouvelle modification.Maintenant, si vous touchez,
git status
Git sera au courant des changements.Et si vous souhaitez supprimer le répertoire, vous devez utiliser cette commande.
Et si vous avez vérifié en utilisant
git status
, vous verrez que le répertoire a été supprimé.la source
La première commande git doit savoir qui vous êtes avant de supprimer quoi que ce soit
la source
Une combinaison des 2 réponses a fonctionné pour moi
s'il affiche toujours un avertissement, supprimez les fichiers manuellement
la source