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.
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
.
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.
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?
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"?
Étape 2.5: Validez vos modifications:
>git commit
Si vous poussez sans faire cela au préalable, cela ne fait rien!
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:
git rm -r --cached your_folder/
your_folder/
à .gitignoreVous 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.