web-dev-qa-db-fra.com

Supprimer un dossier du suivi git

Je dois exclure un dossier (upload de nom) du suivi. J'ai essayé de courir

git rm -r --cached wordpress/wp-content/uploads

et après cela j'ai ajouté le chemin d'accès à .gitignore

/wordpress/wp-content/uploads

mais quand j'ai couru git status ils apparaissent comme supprimés. Si j'essaie de valider les modifications, les fichiers seront supprimés, pas seulement supprimés du suivi.

Qu'est-ce que je fais mal? 

J'ai aussi essayé

git update-index --assume-unchanged <file>

mais cela ne semble dépouiller que les fichiers. Mais je dois supprimer tout un dossier (y compris les sous-dossiers) du suivi.

241
Stefan

Je suis tombé sur cette question alors que Google cherchait "git remove folder from tracking". La question de l'OP m'amène à la réponse. Je le résume ici pour les générations futures.

Question

Comment supprimer un dossier de mon référentiel git sans le supprimer de ma machine locale (environnement de développement, par exemple)?

Réponse

Étape 1. Ajoutez le chemin du dossier au fichier .gitignore racine de votre référentiel.

path_to_your_folder/

Étape 2. Supprimez le dossier de votre suivi git local, mais conservez-le sur votre disque.

git rm -r --cached path_to_your_folder/

Étape 3. Transférez vos modifications dans votre dépôt Git.

Le dossier sera considéré comme "supprimé" du point de vue de Git (c'est-à-dire qu'ils sont dans l'historique, mais pas dans le dernier commit, et que les personnes extraites de ce référentiel obtiendront les fichiers supprimés de leurs arbres), mais restent dans votre répertoire de travail parce que vous avez utilisé --cached.

565
Tod Birdsall

Cela fonctionne pour moi:

git rm -r --cached --ignore-unmatch folder_name

--ignore-unmatch est important ici, sans cette option, git se terminera avec une erreur sur le premier fichier ne figurant pas dans l'index. 

13
qed

Pour oublier le répertoire de manière récursive, ajoutez /*/* au chemin:

git update-index --assume-unchanged wordpress/wp-content/uploads/*/*

Utiliser git rm --cached n'est pas bon pour la collaboration. Plus de détails ici: Comment arrêter le suivi et ignorer les modifications apportées à un fichier dans Git?

5
vitalets

De la documentation git: 

Une autre chose utile à faire est de conserver le fichier dans votre arbre de travail mais de le supprimer de votre zone de stockage intermédiaire. En d'autres termes, vous voudrez peut-être conserver le fichier sur votre disque dur, mais Git ne le suivra plus. Ceci est particulièrement utile si vous avez oublié d’ajouter quelque chose à votre fichier .gitignore et que vous l’avez accidentellement mis en scène, comme un fichier journal volumineux ou un ensemble de fichiers compilés. Pour ce faire, utilisez l'option --cached:

$ git rm --cached readme.txt

Alors peut-être ne pas inclure le "-r"?

4
user3750325

Étape 2.5: Validez vos modifications:

>git commit

Si vous poussez sans faire cela au préalable, cela ne fait rien!

1
M.H.

Je sais que c'est un vieux fil, mais je voulais juste ajouter un peu, car la solution indiquée ne résolvait pas le problème pour moi (même si j'ai essayé plusieurs fois).

La seule façon pour que je puisse réellement arrêter le suivi du dossier par git était de procéder comme suit:

  1. Faites une sauvegarde du dossier local et mettez-la dans un endroit sûr.
  2. Supprimer le dossier de votre référentiel local
  3. Assurez-vous que le cache est effacé git rm -r --cached your_folder/
  4. Ajouter your_folder/ à .gitignore
  5. Valider les modifications 
  6. Rajoutez la sauvegarde dans votre dépôt

Vous devriez maintenant voir que le dossier n'est plus suivi.

Ne me demandez pas pourquoi le simple effacement de la mémoire cache n'a pas fonctionné pour moi. Je ne suis pas un super assistant de Git, mais voici comment j'ai résolu le problème.

0
lukehillonline