57 votes

Git : Ignorer les fichiers contrôlés par versionnement

Le fichier .gitignore est très utile pour ignorer certains fichiers que nous ne voulons pas contrôler. Malheureusement, il ne peut pas être utilisé lorsque le fichier est déjà sous contrôle de version. Par exemple, mon fichier .gitignore (qui est déjà ajouté à git) peut être différent de ce que veut mon collègue (par exemple, je veux ignorer les fichiers Vim). Chaque fois que je fais des changements à ce fichier, git le montre comme un fichier modifié. Ainsi, mes questions :

  1. Y a-t-il un moyen d'ignorer les modifications pour un certain fichier, qui est déjà contrôlé par Git ?!
  2. Y a-t-il un moyen de commettre ces changements, mais de les garder pour moi uniquement ? Bien sûr, je ne veux pas utiliser une branche, car je travaille sur une certaine branche.

7 votes

Aucune des réponses ne répond à la question principale - le numéro 1, y compris celle acceptée. La question portait sur l'ignorance des fichiers qui sont déjà contrôlés, pas .gitignore ni l'exclusion ne feront l'affaire.

9 votes

La réponse de git-update-index est la bonne réponse.

129voto

Aristotle Pagaltzis Points 43253

Utilisez git-update-index pour ignorer temporairement les modifications apportées aux fichiers déjà sous contrôle de version :

git update-index --assume-unchanged 

Pour annuler cela, utilisez :

git update-index --no-assume-unchanged 

Jetez également un œil aux options skip-worktree et no-skip-worktree pour update-index si vous avez besoin que cela survive à un git-reset

15voto

Greg Hewgill Points 356191

Si vous voulez exclure des fichiers spécifiques à votre processus (comme les fichiers temporaires de Vim), modifiez le fichier (local) .git/info/exclude et ajoutez vos motifs d'exclusion là-bas. Ce fichier est conçu pour des exclusions spécifiques aux développeurs plutôt que .gitignore, qui est conçu pour des exclusions au niveau du projet.

En résumé, tout le monde devrait être d'accord sur ce qui est ajouté à .gitignore. Pour les fichiers sur lesquels vous n'êtes pas d'accord, utilisez .git/info/exclude.

2 votes

J'ai ajouté des fichiers sous contrôle de version à .get/info/exclude mais ils ont continué à apparaître comme des fichiers modifiés.

3 votes

La question d'origine cherche un moyen pour différents collègues d'ignorer différents ensembles de fichiers. Ma réponse présente le fichier .git/info/exclude qui est conçu à cette fin. Cependant, si vous généralisez la question en "comment ignorer les modifications de n'importe quel fichier déjà ajouté à Git", alors oui, vous avez besoin d'une solution différente car c'est un problème différent. Je ne recommanderais pas la solution générale pour ce problème spécifique, car les collègues ne peuvent alors plus partager les changements apportés à .gitignore.

2voto

Jean Hominal Points 7001

Je ne peux vraiment pas répondre à la question générale (ignorer les fichiers suivis par Git) - cela me semble être une fonctionnalité qui serait beaucoup plus nuisible qu'utile.

Cependant, la page du manuel de gitignore spécifie quelques façons de configurer des motifs pour exclure des fichiers.

En particulier, cela donne des instructions explicites sur la façon d'utiliser ces différentes méthodes :

  • Les modèles qui doivent être contrôlés par version et distribués à d'autres dépôts via un clone (c'est-à-dire des fichiers que tous les développeurs voudront ignorer) doivent aller dans un fichier .gitignore.

Cela signifie que votre fichier .gitignore ne doit pas être différent de celui de vos collègues - il fonctionne comme prévu.

  • Les modèles spécifiques à un dépôt particulier mais qui n'ont pas besoin d'être partagés avec d'autres dépôts associés (par exemple, des fichiers auxiliaires qui vivent à l'intérieur du dépôt mais sont propres au flux de travail d'un utilisateur) doivent aller dans le fichier $GIT_DIR/info/exclude.

  • Les modèles que l'utilisateur veut que git ignore dans toutes les situations (par exemple, les fichiers de sauvegarde ou les fichiers temporaires générés par l'éditeur choisi par l'utilisateur) vont généralement dans un fichier spécifié par core.excludesfile dans le fichier ~/.gitconfig de l'utilisateur.

Et voilà. Spécifiez un chemin de fichier core.excludesfile dans votre fichier ~/.gitconfig, puis mettez-y les modèles que vous voulez exclure.

1voto

Abizern Points 52378

J'ai écrit sur trois façons d'exclure des fichiers ailleurs.

En résumé:

  1. Un fichier .gitignore global s'applique à tous les dépôts sur ce système
  2. Le fichier .gitignore dans le dépôt s'applique au dépôt et à tous les clones de ce dépôt.
  3. Le fichier .git/info/exclude s'applique uniquement à ce dépôt.

Les éléments inférieurs de la liste ont priorité sur les éléments supérieurs, et un ! devant un élément dans l'une des expressions du fichier inverse une exclusion précédente.

Ce paradigme est également présent dans Git. Par exemple, si vous utilisiez des sous-modules, l'URL du sous-module à utiliser se trouve dans le fichier .gitmodules du dépôt, mais vous pouvez outrepasser l'URL à utiliser dans le fichier .git/config.

0voto

cubrman Points 170

Voici une solution généralisée et ubiquitaire (non individuelle) pour ceux qui utilisent Git sous l'interface visuelle SmartGitHG :

  • choisissez un dossier que vous souhaitez ignorer dans la fenêtre "Dépôts";
  • sélectionnez tous les fichiers de ce dossier dans la fenêtre "Fichiers" (dévoilez les fichiers inchangés en cliquant sur l'icône de filtre correspondante dans la partie supérieure droite de la fenêtre principale);
  • cliquez sur "Supprimer" dans le panneau de contrôle (cochez la case "Supprimer les fichiers locaux" si nécessaire);
  • validez les modifications locales;
  • clic droit sur le dossier dans la fenêtre "Dépôts";
  • cliquez sur "Ignorer".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X