745 votes

.gitignore tous les fichiers .DS_Store dans chaque dossier et sous-dossier

J'ai ajouté .DS_Store au fichier .gitignore, mais il semble que .DS_Store ne soit ignoré que dans le répertoire racine, et non dans tous les dossiers et sous-dossiers.

Comment puis-je réparer cela ?

3 votes

0 votes

Comment exactement l'avez-vous ajouté au fichier .gitignore ? Cela devrait fonctionner dans tous les répertoires (c'est le cas pour moi).

0 votes

Cela fonctionne pour moi aussi. J'ai également essayé d'utiliser un saut de ligne (spécifique à la plate-forme) à la fin du fichier, mais cela n'a pas changé le fait que les répertoires .DS_Store dans n'importe quelle partie de la hiérarchie sont toujours ignorés.

880voto

Edward Newell Points 926

Je pense que le problème que vous rencontrez est que dans un commit précédent, vous avez accidentellement ajouté .DS_Store dans le référentiel. Bien sûr, une fois qu'un fichier est suivi dans votre référentiel, il continuera à être suivi même s'il correspond à une entrée dans un fichier .gitignore applicable.

Vous devez supprimer manuellement le .DS_Store qui ont été ajoutés à votre référentiel. Vous pouvez utiliser

git rm --cached .DS_Store

Une fois retiré, git devrait l'ignorer. Vous ne devriez avoir besoin que de la ligne suivante dans votre racine .gitignore fichier : .DS_Store . N'oubliez pas la période !

git rm --cached .DS_Store

ne supprime que .DS_Store du répertoire actuel. Vous pouvez utiliser

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

pour supprimer tous les .DS_Stores du référentiel.

Pointe feutre : Puisque vous ne voulez probablement jamais inclure .DS_Store faites une règle globale. Tout d'abord, créez une règle globale .gitignore quelque part, par exemple

echo .DS_Store >> ~/.gitignore_global

Maintenant, dites à git de l'utiliser pour tous les dépôts :

git config --global core.excludesfile ~/.gitignore_global

Cette page m'a aidé à répondre à votre question.

64 votes

Les deux derniers paragraphes répondent à cette question. Merci.

75 votes

Git rm --cached .DS_Store'' supprime un seul .DS_Store du répertoire courant. Utilisez ''find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch'' pour supprimer tous les .DS_Stores du repo.

4 votes

Une liste d'autres fichiers courants à ignorer pourrait être utile.

418voto

ronald8192 Points 41

Ajouter `/.DS_Storeen.gitignore` pour le sous-répertoire**


Si .DS_Store déjà engagés :

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

Pour les ignorer dans tout référentiel : (parfois il a nommé ._.DS_Store )

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

0 votes

Toujours téléchargé dans mon dépôt ?

0 votes

@FreddySidauruk utiliser git rm --cached your_file premièrement

0 votes

@FreddySidauruk devrait être find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch de la part de : stackoverflow.com/questions/18393498/

213voto

epicrates Points 1

Si .DS_Store n'a jamais été ajouté à votre dépôt git, ajoutez-le simplement à votre fichier .gitignore.

Si vous n'en avez pas, créez un fichier appelé

.gitignore

Dans le répertoire racine de votre application et écrivez simplement

**/.DS_Store

En elle. Cela ne permettra jamais au fichier .DS_Store de se faufiler dans votre git.

Mais, si c'est déjà là, écrivez dans votre terminal :

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

puis valider et pousser les changements pour supprimer le .DS_Store de votre dépôt distant :

git commit -m "Remove .DS_Store from everywhere"

git push origin master

Et maintenant ajoutez .DS_Store à votre fichier .gitignore, et puis à nouveau commit et push avec les 2 derniers morceaux de code (git commit..., git push...)

99voto

Yarin Points 18186

Su .gitignore devrait ressembler à ceci :

# Ignore Mac DS_Store files
.DS_Store

Tant que vous n'incluez pas de barre oblique, la correspondance est établie avec le nom du fichier dans tous les répertoires. (de aquí )

57voto

user5783745 Points 1214

Il suffit de le placer sur une nouvelle ligne dans .gitignore

**/.DS_Store

De documentation git

  • Un "**" suivi d'une barre oblique signifie une correspondance dans tous les répertoires. Par exemple, "**/foo" correspond au fichier ou au répertoire "foo" n'importe où, comme le motif "foo". "**/foo/bar" correspond à un fichier ou un répertoire "bar" situé directement sous le répertoire "foo".

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