Ajouter .gitignore à gitignore

140

Est-il possible d'ajouter le .gitignorefichier à .gitignorelui-même?

.gitignore

Cela ne fonctionne pas cependant

Je ne veux pas le voir dans les fichiers modifiés

7ochem
la source
8
pourquoi voudriez-vous faire ça? validez simplement vos modifications. .gitignoreest censé faire partie de votre référentiel, répertoriant les modèles de fichiers indésirables pour le projet.
KurzedMetal
1
.gitignoredoit faire partie de votre référentiel, afin que tous les membres de votre équipe ignorent ou archivent les mêmes fichiers. Ce .gitignoren'est pas parce qu'il se trouve quelque part dans vos dossiers de code que vous devez le déployer.
Ryan Lundy
duplication possible de Comment dire à Git d'ignorer ".gitignore"?
That Brazilian Guy
vous pouvez utiliser git rm --cached .gitignoreet annuler le suivi .gitignore
hassanzadeh.sd

Réponses:

170

Le .gitignorebut du fichier est d'empêcher quiconque collabore à un projet de commettre accidentellement certains fichiers communs dans un projet, tels que les fichiers de cache générés. Par conséquent, vous ne devez pas ignorer .gitignore, car il est censé être inclus dans le référentiel.

Si vous souhaitez ignorer les fichiers dans un seul référentiel mais que vous voulez éviter de valider la liste des ignorés (par exemple pour les fichiers personnels), vous pouvez les ajouter à .git/info/excludece référentiel.

Si vous souhaitez ignorer certains fichiers sur chaque référentiel de votre machine, vous pouvez créer le fichier ~/.gitignore_global, puis exécuter

git config --global core.excludesfile ~/.gitignore_global
Lars Nyström
la source
36

Un .gitignore peut s'ignorer s'il n'a jamais été archivé :

mhaase@ubuntu:~$ git --version
git version 1.7.9.5
mhaase@ubuntu:~$ git init temp
Initialized empty Git repository in /home/mhaase/temp/.git/
mhaase@ubuntu:~$ cd temp
mhaase@ubuntu:~/temp$ touch .gitignore foo bar baz bat
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
#       bar
#       bat
#       baz
#       foo
mhaase@ubuntu:~/temp$ echo "foo" >> .gitignore
mhaase@ubuntu:~/temp$ echo ".gitignore" >> .gitignore
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       bar
#       bat
#       baz
nothing added to commit but untracked files present (use "git add" to track)

Si vous archivez .gitignore (avant de lui dire de s'ignorer), il apparaîtra toujours dans l'état git, même si vous le modifiez plus tard pour s'ignorer.

Mark E. Haase
la source
1
Exactement, c'est mon cas. Je veux avoir un local .gitignoreavec git-svnqui travailler , que personne ne devrait voir. Alors je l'ai juste ajouté et ça a marché. Mais ensuite, j'ai cherché sur Google pour voir si certaines personnes coincées expliqueraient à d'autres en quoi c'est «mauvais». Cette réponse devrait être acceptée, puis je voterais .git/info/excludeégalement les suggestions. Donc il a juste besoin d'être non suivi ... Pas très surprenant, du moins si vous avez déjà été "subverti" (svn).
Tomasz Gandor
J'ai d'abord un .gitignorefichier de sauvegarde. Ensuite, j'utilise git rm .gitignoreet j'engage ce changement. Enfin, ajoutez et validez .gitignoreà nouveau le fichier avec la règle pour .gitignore. Ça marche!
qzhang
4
Pour résoudre ce problème, vous pouvez exécuter git rm --cached .gitignore.
Gideon
19

Il n'y a pas vraiment de bonne raison de faire cela. Si vous souhaitez que les fichiers soient ignorés uniquement pour votre clone , ajoutez-les à .git/info/exclude, pas dans le .gitignorefichier.

Daenyth
la source
J'obtiens "Impossible de terminer l'opération en raison des modifications existantes du fichier suivant" et le fichier qu'il répertorie celui que j'ai à exclure. Une idée pourquoi?
Paul McCarthy
3

Après avoir entré .gitignorevotre fichier gitignore, essayez ce qui suit,

git rm -r --cached .
git add --all
git commit -m "ignoring gitignore"
git push --set-upstream origin master

Cela devrait fonctionner bien que comme déjà dit, ignorer gitignore peut être contre-productif si votre dépôt est partagé par plusieurs utilisateurs.

Arnab Sanyal
la source
2

Oui, vous pouvez; vous le voyez toujours dans les fichiers modifiés car il est toujours suivi par git, et les fichiers suivis par git sont toujours marqués comme modifiés même s'ils sont en .gitignore. Alors, supprimez-le simplement .

Mais pourquoi ne pas valider ou réinitialiser les modifications que vous avez dessus? C'est un bien meilleur moyen de le retirer de son statut ... Sachez également que tout nouveau clone de votre dépôt devra l'ajouter .gitignore, ce qui peut être ennuyeux.

CharlesB
la source
Oui, et vous devrez got rm --cached .gitignoreprobablement le supprimer séparément de git by .
Tadeck
git rm --cached .gitignore est en train de supprimer de git. C'est destructeur et non souhaitable. Comment simplement ignorer .gitignore pour le clone local?
javadba
0

Vous pouvez y parvenir en écrivant ceci dans votre fichier .gitignore. Le *ajoutera tout à la liste !.gitignoredes ignorés puis supprimera le fichier .gitignore de la liste des ignorés.

*
!.gitignore
Ankit Singh
la source
3
Cela réalise le contraire de ce que OP veut cependant
Dmitry Parzhitsky
Oui, c'est exact, j'ai déjà mentionné la même chose. *ignorera tout. Y compris le .gitignorefichier.
Ankit Singh le
1
Je veux dire, OP essaie de supprimer le .gitignorefichier de la base de code (en l'ajoutant à lui-même, ce qui n'a pas vraiment de sens, mais qui suis-je pour juger). Ici, je peux voir une suggestion qui garantit que le fichier n'est jamais ignoré, ce qui signifie qu'il existe dans (est ajouté à) la base de code
Dmitry Parzhitsky
C'est correct. La question elle-même semble tordue. Mais ok.
Ankit Singh