Gitignore ne fonctionne pas

276

ma .gitignore fichier ne fonctionne pas pour une raison quelconque, et aucune quantité de Google n'a pu le réparer. Voici ce que j'ai:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

C'est dans le répertoire master, qui est mon dépôt git. J'utilise Git 1.8.4.2 parce que je suis sur un MacBook exécutant OSX 10.8.6.

user3280133
la source
4
1. quels fichiers sont indexés alors qu'ils ne le devraient pas? 2. avez-vous ajouté le .gitignore après avoir ajouté ces fichiers au référentiel?
Ahmad
2
@Ahmad Dans plusieurs projets, le /bin/dossier s'affiche toujours lorsque je fais un git status. Je n'ai pas modifié ces fichiers depuis que j'ai ajouté le.gitignore
user3280133
1
"depuis que j'ai ajouté le .gitignore" - donc vous avez ajouté le .gitignore après avoir ajouté les fichiers?
Ahmad
3
possible doublon de .gitignore ne fonctionne pas
Liam

Réponses:

688

Les fichiers / dossiers de votre contrôle de version ne se supprimeront pas simplement parce que vous les avez ajoutés au .gitignore. Ils sont déjà dans le référentiel et vous devez les supprimer. Vous pouvez simplement le faire avec ceci:

( N'oubliez pas de valider tout ce que vous avez changé avant de le faire. )

git rm -rf --cached .
git add .

Cela supprime tous les fichiers du référentiel et les ajoute à nouveau (en respectant cette fois les règles de votre .gitignore).

Ahmad
la source
2
ou vous pouvez simplement essayer de restaurer les fichiers / dossiers que vous avez ajoutés à .gitignore en utilisant git checkout folder_to_ignore / *
Zahra
1
@Greenish mais cela ne fonctionnerait pas s'ils ont déjà été validés, ne fonctionnerait que s'ils ont été mis en scène, ce qui au cas où le dossier était déjà dans le .gitignore ne devrait pas se produire (sauf si vous forcez l'ajout) :)
Ahmad
1
ne fonctionne pas pour moi lorsque je pousse les modifications dans github. Dit que tout est à jour !!!!
Dr Younes Henni
1
Désolé Ahmed, j'ai résolu mon problème en supprimant le fichier gitignore et en tirant et en poussant à nouveau vers le référentiel distant. Je ne me souviens plus de ce que ça disait quand je tape git status. Mon problème est résolu. Merci beaucoup.
Dr Younes Henni
3
Je pense qu'il vaut mieux git ajouter une commande 'git ignore' pour simplifier cela. Ainsi, nous pourrions simplement utiliser git ignore path/fileà tout moment.
Tiw
123

Pour décompresser un seul fichier qui a déjà été ajouté / initialisé dans votre référentiel, c'est-à-dire, arrêtez de suivre le fichier mais ne le supprimez pas de votre utilisation du système: git rm --cached filename

Pour dépister tous les fichiers qui se trouvent maintenant dans votre .gitignore:

Commencez par valider toutes les modifications de code en suspens, puis exécutez cette commande:

git rm -r --cached .

Cela supprime tous les fichiers modifiés de l'index (zone de transit), puis exécutez simplement:

git add .

Engagez-le:

git commit -m ".gitignore is now working"
Nicolas
la source
1
Assurez-vous de fusionner vos branches en arrière sur master ou de déplacer votre pointeur car lorsque j'ai essayé cela, j'ai perdu mes deux branches de fonction. Heureusement, je n'ai perdu aucun travail, toutes mes mises à jour les plus récentes de la branche de travail ont été réinitialisées sur la branche principale, mais selon votre configuration, ce comportement peut être indésirable.
Sledge
Comment utiliseriez-vous cette commande pour supprimer un dossier du cache au lieu d'un fichier?
RealMJDev
15

Après être descendu un peu dans un terrier de lapin en essayant de suivre les réponses à cette question (peut-être parce que je devais le faire dans un projet de studio visuel), j'ai trouvé que le chemin le plus facile était de

  1. Coupez et collez le ou les fichiers que je ne souhaite plus suivre dans un emplacement temporaire

  2. Validez la «suppression» de ces fichiers

  3. Valider une modification de .gitignorepour exclure les fichiers que j'avais temporairement déplacés

  4. Remettez les fichiers dans le dossier.

J'ai trouvé que c'était la façon la plus simple de s'y prendre (au moins dans un studio visuel, ou je suppose que d'autres environnements basés sur le soulèvement IDE comme Android Studio), sans me tirer accidentellement dans le pied avec un assez omniprésent git rm -rf --cached ., après quoi le projet de studio visuel sur lequel je travaillais n'a pas été chargé.

Garrett Simpson
la source
2
J'aime bien cette approche - semble moins destructrice, même si elle n'est pas considérée comme «appropriée».
theyetiman
6

Dans mon cas, c'était un espace vide au début du fichier qui apparaissait clairement lorsque j'ai ouvert le fichier dans le Bloc-notes, ce n'était pas évident dans Visual Studio Code.

S Saad
la source
4

J'ai utilisé quelque chose pour générer du commun .gitignorepour moi et je suis tombé dessus. Après avoir lu la réponse @Ozesh, j'ai ouvert dans VS Code car il a un bon indicateur en bas à droite indiquant le type de fins de ligne. C'était LF donc j'ai converti en CRLF comme suggéré mais pas de dés.

Ensuite, j'ai regardé à côté des fins de ligne et j'ai remarqué qu'il a été enregistré en utilisant UTF16. J'ai donc réenregistré en utilisant UTF8 encodant un voila, cela a fonctionné. Je ne pensais pas que le CRLF importait, alors je l'ai changé pour LF pour être sûr et cela fonctionnait toujours.

Bien sûr, ce n'était pas un problème de PO, car il avait déjà validé les fichiers, ils étaient donc déjà indexés, mais pensait que je partagerais au cas où quelqu'un d'autre tomberait dessus.

TLDR ; Si vous n'avez pas encore validé les fichiers et que .gitignore n'est toujours pas respecté, vérifiez l'encodage des fichiers et assurez-vous que son UTF8 et si cela ne fonctionne pas, essayez peut-être de jouer avec les fins de ligne.

DeezCashews
la source
1
UTF16 était le coupable pour moi. Code VS ouvert> ouvert .gitignore> ouvert l'invite de commande> "Changer le codage du fichier"> "UTF-8"> Enregistrer le fichier
Michael
3

Dans mon cas, les espaces blancs à la fin des lignes de .gitignore en étaient la cause. Alors faites attention aux espaces blancs dans le .gitignore!

026
la source
2

J'ai résolu mon problème en procédant comme suit:

Tout d'abord, je suis un utilisateur Windows, mais j'ai rencontré un problème similaire. Donc, je poste ma solution ici.

Il y a une raison simple pour laquelle parfois le .gitignore ne fonctionne pas comme il est censé le faire. Cela est dû au comportement de conversion EOL.

Voici une solution rapide pour cela

Modifier> Conversion EOL> Format Windows> Enregistrer

Vous pouvez blâmer vos paramètres d'éditeur de texte pour cela.

Par exemple:

Comme je suis développeur Windows, j'utilise généralement Notepad ++ pour éditer mon texte contrairement aux utilisateurs de Vim.

Donc, ce qui se passe, lorsque j'ouvre mon fichier .gitignore à l'aide de Notepad ++, il ressemble à ceci:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Si j'ouvre le même fichier en utilisant le bloc-notes par défaut, voici ce que j'obtiens

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Donc, vous avez peut-être déjà deviné en regardant la sortie. Tout dans le .gitignore est devenu une ligne unique, et comme il y a un ## au début, cela fait comme si tout était commenté.

La solution est simple: ouvrez simplement votre fichier .gitignore avec Notepad ++, puis procédez comme suit

Modifier> Conversion EOL> Format Windows> Enregistrer

La prochaine fois que vous ouvrirez le même fichier avec le bloc-notes par défaut de Windows, tout devrait être correctement formaté. Essayez-le et voyez si cela fonctionne pour vous.

Ozesh
la source
1

De plus, les commentaires doivent être sur leur propre ligne. Ils ne peuvent pas être mis après une entrée. Donc ça ne marchera pas:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Mais cela fonctionnera:

# fine to comment here
/node_modules
Ben Pritchard
la source
0

Ça git reset --hardmarche pour n'importe qui? Je ne dis pas que c'est une bonne solution, cela a semblé fonctionner la première fois que j'ai essayé.

user1889992
la source
Veuillez ignorer mon commentaire ci-dessus. Quelqu'un au travail a fait quelque chose de si mal dans Git, cela a causé des doublons de dossiers et je ne savais pas depuis un bon moment. Merci.
user1889992
0

J'ai fait la grande erreur d'éditer mon dockerignore, j'ai très bien fonctionné après avoir trouvé le bon fichier ignorer: p


la source
0

Ajouter mon bit car c'est une question populaire.

Je ne pouvais pas placer le répertoire .history dans .gitignore car peu importe le combo que j'ai essayé, cela ne fonctionnait tout simplement pas. Windows continue de générer de nouveaux fichiers à chaque sauvegarde et je ne veux pas du tout les voir.

entrez la description de l'image ici

Mais j'ai réalisé que ce n'était que mon environnement de développement personnel sur ma machine. Des choses comme .history ou .vscode sont spécifiques pour moi, donc ce serait bizarre si tout le monde incluait ses propres entrées .gitignore en fonction de l'IDE ou du système d'exploitation qu'ils utilisent.

Donc, cela a fonctionné pour moi, ajoutez simplement ".history" à .git / info / exclude

echo ".history" >> .git/info/exclude
Daniel Katz
la source