Si Git continue de lister un fichier alors qu'il correspond à .gitignore, supprimez-le de l'index de Git tout en conservant la copie locale. Dans Terminal, accédez au dépôt, exécutez git rm --cached -- "path/to/file", puis committez cette suppression indexée ainsi que la règle d'ignorance. La documentation de Git confirme que les règles d'ignorance affectent les fichiers non suivis ; elles n'arrêtent pas le suivi des fichiers déjà présents dans l'index. (Documentation gitignore de Git)
Pourquoi .gitignore n'a pas arrêté le suivi du fichier
Un motif .gitignore indique à Git de ne pas toucher aux chemins non suivis correspondants. Si un fichier a déjà été ajouté au dépôt, Git continue de suivre ses modifications, quelle que soit la règle d'ignorance ajoutée ultérieurement. La règle peut être correcte et sembler pourtant sans effet jusqu'à ce que vous supprimiez ce fichier de l'index. (Documentation gitignore de Git)
Sur Mac, ouvrez Terminal et placez-vous dans le dossier racine du dépôt. Apple documente Terminal comme l’interface en ligne de commande de macOS et identifie zsh comme le shell par défaut ; les commandes ci-dessous fonctionnent dans la configuration zsh habituelle. Vérifiez que vous êtes dans le bon dépôt avant d’en modifier l'index :
git status
Le chemin du fichier dans la commande suivante est relatif à la racine du dépôt. Remplacez l'exemple par le chemin réel. Conservez les guillemets : ils évitent que les espaces et les caractères tels que * ne soient interprétés par le shell. Le -- marque la fin des options, de sorte qu’un chemin commençant par un trait d’union soit traité comme un chemin.
Supprimer le fichier de l'index et conserver la copie sur le Mac
Exécutez :
git rm --cached -- "path/to/file"
--cached supprime le chemin de l'index de Git, et non de l'arbre de travail. Le fichier doit rester sur votre Mac. Cela prépare (stage) une suppression pour le prochain commit ; cela n'efface pas l'historique précédemment committé du fichier. (Documentation git rm de Git)
Si le chemin se trouve dans un répertoire et que vous souhaitez arrêter de suivre l'ensemble du répertoire, ajoutez -r et utilisez son chemin :
git rm --cached -r -- "path/to/directory"
Utilisez ceci avec précaution : Git supprime de l'index tous les chemins suivis situés sous ce répertoire. Les fichiers locaux restent présents, mais la suppression est indexée. Si Git refuse parce que le fichier contient des modifications indexées ou que son contenu diffère de la version du dernier commit, arrêtez-vous et examinez git status ; n'ajoutez pas -f à moins de bien comprendre quelles modifications indexées seraient ignorées. Git documente l’option force comme un moyen de passer outre sa protection habituelle pour ce type de modifications. (Documentation git rm de Git)
Vérifier la règle d'ignorance et contrôler ce qui sera committé
Assurez-vous que le motif .gitignore correspond au chemin d'accès depuis l'emplacement de ce fichier d'ignorance. Par exemple, une règle présente dans le fichier .gitignore à la racine du dépôt et contenant local-settings.json correspond aux fichiers portant ce nom à n'importe quel niveau de répertoire ; /local-settings.json limite la correspondance à la racine du dépôt. Les motifs Git sont relatifs au répertoire contenant le .gitignore, et des fichiers d'ignorance plus spécifiques situés plus bas dans l'arborescence peuvent influer sur le résultat. (Documentation gitignore de Git)
Demandez à Git quelle règle correspond au fichier désormais non suivi :
git check-ignore -v -- "path/to/file"
L'option -v affiche la source et le motif en cause. Si rien ne s'affiche, revérifiez l'orthographe, le chemin et l'emplacement du motif. La FAQ de Git recommande git rm --cached associé à un motif d'ignorance correspondant pour cesser de suivre et ignorer un fichier déjà suivi. (FAQ de Git)
Vérifiez la modification indexée et la copie de travail avant de committer :
git status
Le statut doit indiquer le chemin comme indexé pour suppression (« deleted ») et .gitignore comme modifié si sa modification n'est pas déjà indexée. Le fichier de travail doit toujours être présent. Indexez le fichier d'ignorance si nécessaire, puis committez les deux modifications :
git add -- .gitignore
git commit -m "Stop tracking local file"
Si le fichier d'ignorance concerné se trouve dans un sous-répertoire, utilisez son chemin relatif au dépôt dans git add. Vérifiez à nouveau git status avant de committer, en particulier si d'autres travaux sont indexés, afin que le commit ne contienne que les modifications prévues.
Ce qui se passe après le commit
Après le commit, Git ne suit plus ce chemin dans la branche courante, et la règle d'ignorance empêche qu'il ne soit rajouté accidentellement. Le commit enregistrant une suppression, les collaborateurs qui extraient (checkout) ce commit verront le fichier suivi disparaître de leur arbre de travail ; la copie locale ignorée de chaque personne n'est pas automatiquement préservée par Git. Coordonnez-vous avant de committer si le fichier contient une configuration partagée dont vos collègues ont encore besoin. Les versions précédemment committées restent dans l'historique du dépôt, cette procédure ne supprime donc pas les copies passées. (Documentation git rm de Git)
Si votre intention était seulement de masquer des modifications locales tout en gardant le fichier suivi pour tout le monde, .gitignore n'est pas le mécanisme approprié. Git déconseille d'utiliser assume-unchanged ou skip-worktree à cette fin ; privilégiez plutôt un fichier modèle suivi et un fichier de configuration local distinct et ignoré. (FAQ de Git)
Sources
FAQ de Git — Git
Modifier le shell par défaut dans Terminal sur Mac — Assistance Apple