web-dev-qa-db-fra.com

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

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 un référentiel entier?

1094
Sahat Yalkabov

Supprimer le répertoire de git et local

Vous pouvez passer la commande "maître" avec les deux répertoires;

git rm -r one-of-the-directories
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 de ne pas le supprimer entièrement du système de fichiers (local).

Dans ce cas, utilisez:

git rm -r --cached myFolder
2070
karmakaze

Pour supprimer le dossier/répertoire uniquement du référentiel git et non du local, essayez 3 commandes simples.


Procédure pour supprimer le répertoire

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git Push Origin master

Procédure pour ignorer ce dossier lors des prochains commits

Pour ignorer ce dossier des commits suivants, créez un fichier à la racine nommé . Gitignore et mettez-y le nom du dossier. Vous pouvez en mettre autant que vous voulez

. gitignore le fichier ressemblera à ceci

/FolderName

remove directory

253
eirenaios

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 votre navigateur de système de fichiers (par exemple, dans l'Explorateur de fichiers Windows). Après la suppression du répertoire, en émettant la commande:
git add -A
puis
git commit -m 'deleting directory'
puis
git Push Origin master.

71
cmcculloh

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

Cela forcera la suppression du répertoire.

20
Breen ho

Si vous supprimez les fichiers du répertoire (avec git rm comme l'expliquent les autres réponses), le répertoire n'existe plus en ce qui concerne git. Vous ne pouvez pas valider un répertoire vide ni en supprimer un.

Ceci est différent de Subversion où vous devez explicitement svn rm emptyfolder/, et c'est d'ailleurs pourquoi la page man de git se décrit comme "le traqueur de contenu stupide"

Une réponse sur "Comment ajouter un répertoire vide à un référentiel git" renvoie au FAQ sur ce sujet :

Actuellement, la conception de l'index git (zone intermédiaire) ne permet que la liste des fichiers et aucune personne suffisamment compétente pour effectuer la modification permettant aux répertoires vides de se soucier suffisamment de cette situation pour y remédier.

Les répertoires sont ajoutés automatiquement lors de l'ajout de fichiers. C'est-à-dire que les répertoires ne doivent jamais être ajoutés au référentiel et qu'ils ne font pas l'objet d'un suivi.

Vous pouvez dire "git add <dir>" et il y ajoutera des fichiers.

Si vous avez vraiment besoin d'un répertoire pour exister dans les caisses, vous devez créer un fichier dans celui-ci. .gitignore fonctionne bien à cette fin; vous pouvez le laisser vide ou indiquer le nom des fichiers que vous souhaitez voir apparaître dans le répertoire.

16
dbr

Allez dans votre répertoire git puis tapez la commande suivante: rm -rf < Nom du répertoire >

Après la suppression du répertoire, validez les modifications par: git commit -m "Votre message de validation"

Ensuite, appuyez simplement sur les modifications du répertoire GIT distant: git Push Origin < Nom de la branche >

6
anky

J'utilise habituellement git add --all pour supprimer des fichiers/dossiers des référentiels distants

rm -r folder_name
git add --all
git commit -m "some comment"
git Push Origin master

master peut être remplacé par toute autre branche du référentiel.

4
ettanany

Vous pouvez supprimer le dossier localement, puis appuyer sur, comme suit:

git rm -r folder_name
git commit -m "your commit"
git Push Origin master
4
shrikant

pour suppression 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 arbre de travail, vous devez simplement le supprimer avec

rm -r folderName

Il n'est pas nécessaire d'impliquer Git.

4
Rida

Vous pouvez utiliser l’arbre source Attlasian (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Il suffit de sélectionner les fichiers de l’arborescence et de cliquer 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. Puis Commit, puis Push.

2
Sergey Groshev

Un de mes collègues a suggéré BFG Repo-Cleaner ce que je pense puissant. Il ne s'agit pas uniquement de supprimer les données indésirables, mais également de nettoyer votre référentiel de toute information de validation associée.

1
thanh.h.le

Pour ajouter un nouveau répertoire:

mkdir <YOUR-DIRECTORY>

Mais maintenant, Git n'est pas au courant de ce nouveau répertoire, car il garde la trace des fichiers et non des répertoires DIRECTORY

git status

Git ne sera pas au courant des modifications que nous avons apportées. Nous avons donc ajouté un fichier caché .keep pour le sensibiliser à cette nouvelle modification.

touch /YOUR-directory/.keep

Maintenant, si vous appuyez sur git status, Git sera informé des modifications.

Et si vous souhaitez supprimer le répertoire, vous devez utiliser cette commande.

rm -r <YOUR-DIRECTORY>

Et si vous avez coché en utilisant git status, vous verrez que le répertoire a été supprimé.

1
Abo3atef

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

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

supprime les références des anciens commits:

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

S'assurer que toutes les anciennes références sont complètement retirées

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

Effectuer une collecte des ordures

git gc --Prune=all --aggressive

Poussez les modifications dans le référentiel en ligne:

git Push

Vous avez terminé ici.

Mais vous pouvez faire suivre toutes les modifications à toutes les branches avec: Mais soyez prudent 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.

0
Skyborg

La première commande git doit savoir qui vous êtes avant de supprimer quoi que ce soit

  1. git init
  2. git config user.name "quelqu'un"
  3. git config user.email "quelqu'[email protected]"
  4. git rm -r
  5. git commit -m "suppression de répertoire"
  6. maître git Push Origin
0
Zeus