web-dev-qa-db-fra.com

Comment puis-je empêcher .gitignore de figurer dans la liste des fichiers non suivis?

Je viens de faire un git init à la racine de mon nouveau projet.

Ensuite, j'ai créé un fichier .gitignore.

Maintenant, lorsque je tape git status, . Gitignore le fichier apparaît dans la liste des fichiers non suivis. Pourquoi donc?

953

Le fichier .gitignore doit se trouver dans votre référentiel. Il doit donc être ajouté et validé, comme le suggère git status. Cela doit faire partie de l'arborescence du référentiel afin que les modifications qui y sont apportées puissent être fusionnées, etc.

Alors, ajoutez-le à votre référentiel, il ne devrait pas être gitignored.

Si vous le souhaitez vraiment, vous pouvez ajouter .gitignore au fichier .gitignore si vous ne souhaitez pas le valider. Cependant, dans ce cas, il est probablement préférable d’ajouter ignores à .git/info/exclude, un fichier spécial de contrôle local qui fonctionne exactement comme .gitignore mais ne s'affiche pas dans "git status" puisqu'il se trouve dans le .git. dossier.

Voir aussi https://help.github.com/articles/ignoring-files

931
August Lilleaas

Si vous voulez stocker la liste des fichiers ignorés en dehors de votre arbre Git, vous pouvez utiliser le fichier . Git/info/exclude. Il s’applique uniquement à votre commande du repo.

278
Paweł Hajdan

Vous pouvez réellement mettre une ligne ".gitignore" dans votre fichier ".gitignore". Cela ferait en sorte que le fichier ".gitignore" soit ignoré par git. Je ne pense pas vraiment que ce soit une bonne idée. Je pense que le fichier ignore devrait être contrôlé et suivi. Je ne fais que mettre ceci dehors pour la complétude.

74
1800 INFORMATION

Vous pouvez également avoir un fichier utilisateur global git .gitignore qui s'appliquera automatiquement à tous votre dépôt. Ceci est utile pour IDE et les fichiers d’éditeur (par exemple, les fichiers swp et *~ pour Vim). Modifier les emplacements de répertoire pour correspondre à votre système d'exploitation

  1. Ajoutez à votre fichier ~/.gitconfig

    [core]
    excludesfile = /home/username/.gitignore
    
  2. Créez un fichier ~/.gitignore avec des modèles de fichiers à ignorer

  3. Enregistrez vos fichiers de points dans un autre dépôt afin de disposer d’une sauvegarde (facultatif).

Chaque fois que vous copiez, initiez ou clonez un repo, votre fichier global gitignore sera également utilisé.

51
Alec the Geek

Si quelqu'un a déjà ajouté un .gitignore à votre référentiel, mais que vous souhaitez y apporter des modifications et que ces modifications sont ignorées, procédez comme suit:

git update-index --assume-unchanged .gitignore

Source .

42
Leif Gruenwoldt

Une fois que vous avez ajouté le fichier .gitignore et que vous l'avez validé, il n'apparaît plus dans la liste "Fichiers non suivis".

git add .gitignore
git commit -m "add .gitignore file"
git status
37
Greg Hewgill

Juste au cas où quelqu'un d'autre a la même douleur que nous. Nous voulions exclure un fichier déjà validé.

Cet article était bien plus utile: travailler avec .git/info/exclude trop tard

Plus précisément, pour ignorer un fichier, vous devez utiliser la commande git remove Voir git rm ( http://www.kernel.org /pub/software/scm/git/docs/git-rm.html )

vous le testez en allant

git rm --dry-run *.log
(si vous dites vouloir exclure tous les fichiers journaux)

cela affichera ce que serait exclu si vous l'exécutiez.

ensuite

vous l'exécutez en allant

git rm *.log
(ou le chemin/expression du nom de fichier que vous voulez)

Ajoutez ensuite une ligne _*.log_ à votre fichier _.gitignore_.

20
Evolve

Bien sûr, le fichier .gitignore apparaît sur le statut, car il est non suivi, et git le considère comme un nouveau fichier savoureux à manger!

Comme .gitignore est un fichier non suivi, il est donc possible d’être ignoré par git lorsque vous le mettez dans .gitignore!

Donc, la réponse est simple: ajoutez simplement la ligne:

.gitignore # Ignore the hand that feeds!

dans votre fichier .gitignore!

Et, contrairement à la réponse d'August, je devrais dire que ce n'est pas que le fichier .gitignore devrait se trouver dans votre référentiel. Il se trouve que cela peut être, ce qui est souvent pratique. Et il est probablement vrai que c’est la raison pour laquelle .gitignore a été créé comme alternative à .git/info/exclude, qui n’a pas la possibilité d’être suivi par le référentiel. Quoi qu'il en soit, la façon dont vous utilisez votre fichier .gitignore dépend entièrement de vous.

Pour référence, consultez la page de manuel gitignore (5) sur kernel.org.

15
chase

L'idée est de placer les fichiers spécifiques à votre projet dans le fichier .gitignore et de les ajouter (comme cela a déjà été mentionné) au référentiel. Par exemple, les fichiers .pyc et .o, les journaux créés par la suite de tests, certains appareils fixes, etc.

Pour les fichiers créés par votre propre configuration mais qui n'apparaîtront pas nécessairement pour chaque utilisateur (comme les fichiers .swp si vous utilisez vim, les répertoires cachés ecplise, etc.), vous devez utiliser .git/info/exclude (comme déjà mentionné). .

15
bayer

Tout d’abord, comme beaucoup d’autres déjà dit, votre .gitignore devrait être suivi par Git (et ne devrait donc pas être ignoré). Laisse moi expliquer pourquoi.

(TL; DR: validez le fichier .gitignore et utilisez un global .gitignore pour ignorer les fichiers créés par votre IDE ou votre système d'exploitation)

Comme vous le savez probablement déjà, Git est un système de contrôle de version distribué . Cela signifie que cela vous permet de passer d'une version à une autre (même si le développement a divergé dans différentes branches) et de permettre à plusieurs développeurs de travailler sur le même projet.

Bien que le suivi de votre .gitignore présente également des avantages lorsque vous basculez entre des instantanés, la raison la plus importante de le valider est que vous souhaitez partager le fichier avec d'autres développeurs travaillant sur le même projet. En validant le fichier dans Git, les autres contributeurs obtiendront automatiquement le fichier .gitignore lorsqu’ils cloneront le référentiel. Ils n'auront ainsi plus à s’inquiéter de la validation accidentelle d’un fichier qui ne devrait pas être validé répertoires de cache, informations d'identification de la base de données, etc.). Et si, à un moment donné, le .gitignore du projet est mis à jour, ils peuvent simplement extraire ces modifications au lieu de devoir modifier le fichier manuellement.

Bien sûr, vous voudrez peut-être ignorer certains fichiers et dossiers, mais ils sont spécifiques à votre cas et ne s'appliquent pas aux autres développeurs. Cependant, ceux-ci ne doivent pas figurer dans le .gitignore du projet. Il existe deux autres endroits où vous pouvez ignorer des fichiers et des dossiers:

  • Les fichiers et les dossiers créés par votre système d'exploitation ou IDE doivent être placés dans un global .gitignore . L'avantage est que ce .gitignore est appliqué à tous les référentiels de votre ordinateur. Vous n'avez donc pas à le répéter pour chaque référentiel. Et il n'est pas partagé avec d'autres développeurs, car ils pourraient utiliser un système d'exploitation et/ou un IDE différent.
  • Les fichiers qui n'appartiennent ni au .gitignore du projet ni au global .gitignore peuvent être ignorés à l'aide de le référentiel explicite est exclu dans your_project_directory/.git/info/exclude . Ce fichier ne sera pas partagé avec d'autres développeurs et est spécifique à ce référentiel unique.
14
Nic Wortel

Méfiez-vous du "problème" suivant Parfois, vous souhaitez ajouter des répertoires mais aucun fichier dans ces répertoires. La solution simple consiste à créer un fichier .gitignore avec le contenu suivant:

*

Cela semble fonctionner correctement jusqu'à ce que vous réalisiez que le répertoire n'a pas été ajouté (comme prévu dans votre référentiel. La raison en est que le fichier .gitignore sera également ignoré et que, par conséquent, le répertoire sera vide. :

*
!.gitignore
11
Maze

Cela semble fonctionner uniquement pour votre répertoire actuel afin que Git ignore tous les fichiers du référentiel.

mettre à jour ce fichier

.git/info/exclude 

avec votre joker ou nom de fichier

*pyc
*swp
*~
8
Paul Tyrrell

Dans mon cas, je veux exclure un fichier existant. Seulement modifier . Gitignore ne fonctionne pas. J'ai suivi ces étapes:

git rm --cached dirToFile/file.php
vim .gitignore
git commit -a

De cette façon, j'ai nettoyé du cache le fichier que je voulais exclure et après l'avoir ajouté à . Gitignore.

4
Andrea Perdicchia

Si vous avez déjà enregistré .gitignore et que vous souhaitez ignorer les modifications, consultez cette réponse :

Essayez d'utiliser cette commande:

git update-index --assume-unchanged FILENAME_TO_IGNORE

Pour l'inverser (si vous souhaitez jamais y apporter des modifications), utilisez:

git update-index --no-assume-unchanged

UPDATE:

Voici comment lister les fichiers "supposés inchangés" dans le répertoire courant:

git ls-files -v | grep -E "^[a-z]"

Comme l'option -v utilisera des lettres minuscules pour les fichiers 'supposés inchangés'.

4
Aaron

Accédez au répertoire de base de votre dépôt Git et exécutez la commande suivante:

echo '\\.*' >> .gitignore

Tous les fichiers de points seront ignorés, y compris ce satané .DS_Store si vous êtes sur un mac.

3
weffen

Il est fort possible qu'un utilisateur final souhaite que Git ignore le fichier ".gitignore" simplement parce que les dossiers spécifiques à IDE créés par Eclipse ne sont probablement pas identiques à ceux de NetBeans ou d'un autre IDE. Donc, pour garder le code source IDE antagoniste, il est facile d'avoir un git ignore personnalisé qui n'est pas partagé avec toute l'équipe, car chaque développeur peut utiliser différents IDE.

2
John Brown

Je pense qu'il y a des situations où ignorer le .gitignore est très utile. Par exemple, lorsque vous avez plusieurs équipes ou une grande équipe travaillant sur la même base de code. Dans ce cas, vous devez avoir certaines conventions, dont l'une concerne ce qui est ignoré dans le dépôt git. Il s’agit généralement d’ignorer les fichiers et les répertoires créés par IDE ou le système d’exploitation, certains journaux générés, etc.

Cependant, il existe une force qui tend à introduire des modifications non conventionnelles dans le fichier .gitignore. Le fichier .gitignore peut être encore modifié par une personne irresponsable, par erreur, par un outil utilisé ou dans un autre cas.

Pour avoir une contre-force à cela, nous pouvons faire comme suit:

  1. Le fichier initial .gitignore doit refléter la convention des équipes,
  2. Après avoir été poussé, le fichier .gitignore devrait être sécurisé en ajoutant une entrée .gitignore et pousser à nouveau ce changement. Le fichier .gitignore est ainsi "scellé".

Le fichier "scellé" .gitignore peut être modifié, uniquement localement, sans propager ces changeurs aux autres membres de l'équipe. Cependant, si un changement est largement accepté par l'ensemble de l'équipe (des équipes), il est possible de le "dé-sceller", de le changer et de le "sceller" à nouveau. Cela ne peut pas être fait par erreur, seulement intentionnellement.

Malheureusement, vous ne pouvez pas être protégé à 100% contre la stupidité, mais de cette façon, vous avez tout mis en œuvre pour éviter que des choses stupides ne se produisent.

Si vous avez une équipe relativement petite avec de très bons professionnels, cela ne serait pas important, mais même ces gars-là apprécieraient d'avoir moins de soucis à se faire.

Utiliser .git/info/exclude est cool quand vous ne pouvez rien faire avec les paramètres d'infrastructure, vous pouvez juste couvrir votre propre ** pour ne pas vous tromper.

En ce qui concerne ce qui est juste et ce qui ne va pas, je vote pour que .gitignore entre dans le fichier .gitignore, donnant à chacun la liberté de faire localement tout ce qu’il veut, sans toutefois envahir les autres.

1
Sasa

.gitignore consiste à ignorer les fichiers autres. git concerne les fichiers donc il s’agit d’ignorer les fichiers. Cependant, comme git fonctionne avec des fichiers, ce fichier doit être présent comme mécanisme pour lister les autres noms de fichiers.

Si cela s'appelait .the_list_of_ignored_files cela serait peut-être un peu plus évident.

Une analogie est une liste de choses à faire que vous ne voulez PAS faire. A moins que vous ne les listiez quelque part, vous ne saurez rien à leur sujet.

1
Michael Durrant

J'ai trouvé que le meilleur endroit pour configurer une ignorance des fichiers embêtants .DS_Store est dans le fichier .git/info/exclude.

IntelliJ semble le faire automatiquement lorsque vous configurez un référentiel git dans celui-ci.

0