.gitignore tous les fichiers .DS_Store dans chaque dossier et sous-dossier
561
J'ai ajouté .DS_Store au fichier .gitignore, mais il semble qu'il ignore uniquement .DS_Store dans le répertoire racine, pas dans tous les dossiers et sous-dossiers.
Comment exactement l'avez-vous ajouté à .gitignore? Cela devrait fonctionner dans tous les répertoires (pour moi).
Thilo
Ça marche aussi pour moi. J'ai également essayé lorsque c'est à la fin du fichier, si vous devez avoir un saut de ligne (spécifique à la plate-forme) mais cela n'a pas changé que les répertoires .DS_Store dans n'importe quelle partie de la hiérarchie étaient toujours ignorés.
enorl76
Si je comprends bien, la question était: comment ignorer facilement toutes les occurrences de .DS_Store dans tous les sous-répertoires sans le faire manuellement dans chaque sous-répertoire. J'ai eu le même problème. La réponse ci-dessous montre comment le résoudre (les 2 derniers paragraphes).
petrsyn
Réponses:
648
Je pense que le problème que vous rencontrez est que dans certains commit précédents, vous avez accidentellement ajouté des .DS_Storefichiers au référentiel. Bien sûr, une fois qu'un fichier est suivi dans votre référentiel, il continuera d'être suivi même s'il correspond à une entrée dans un fichier .gitignore applicable.
Vous devez supprimer manuellement les .DS_Storefichiers qui ont été ajoutés à votre référentiel. Vous pouvez utiliser
git rm --cached .DS_Store
Une fois supprimé, git devrait l'ignorer. Vous ne devriez la ligne suivante dans la racine de votre .gitignorefichier: .DS_Store. N'oubliez pas la période!
Astuce: comme vous ne voulez probablement jamais inclure de .DS_Storefichiers, créez une règle globale. Créez d'abord un .gitignorefichier global quelque part, par exemple
echo .DS_Store >> ~/.gitignore_global
Dites maintenant à git de l'utiliser pour tous les dépôts:
Les 2 derniers paragraphes répondent à cette question. Merci.
petrsyn
70
´´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
auco
4
Une liste d'autres fichiers communs à ignorer pourrait être utile
geotheory
14
Mauvaise idée d'utiliser la règle globale IMO: essayer de maintenir des configurations globales sur plusieurs utilisateurs / machines ne fonctionne jamais - vous voulez que les règles régissant votre référentiel dans le référentiel lui-même. D'accord avec cela
Yarin
15
Je ne suis pas d'accord avec toi. (Même si j'ai voté pour votre commentaire car je pense que c'est perspicace.) Si nous faisons globalement, alors chaque utilisateur de mac doit le faire, mais une seule fois. Si nous faisons le référentiel à l'échelle, nous devons le faire pour chaque référentiel. Je ne sais pas pour vous, mais je fais tout le temps de nouveaux dépôts. En le faisant globalement, on résout le problème une fois pour toutes.
Il semble que l'ajout -fsoit nécessaire si vous avez des fichiers ouverts dans les dossiers pertinents:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan
158
Si .DS_Store n'a jamais été ajouté à votre référentiel 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
Dedans. Cela ne permettra jamais au fichier .DS_Store de se faufiler dans votre git.
Mais s'il est déjà là, écrivez dans votre terminal:
Et maintenant, ajoutez .DS_Store à votre fichier .gitignore, puis recommencez et poussez avec les 2 derniers morceaux de code (git commit ..., git push ...)
Pourquoi double astérisque? Qu'est-ce que ça veut dire?
MilanG
1
@MilanG c'est un mot-clé qui signifie essentiellement «rechercher dans ce répertoire et tous les sous-répertoires».
lachie_h
1
Je ne suis pas sûr que ce soit une explication parfaite de ce que signifie le double astérisque. C'est un caractère générique. Pourrait *ou **selon ce que vous voulez réaliser. C'est une façon de dire au shell comment naviguer dans les répertoires. Cette réponse stackoverflow l'explique entièrement stackoverflow.com/a/28199633/4092170
Vous pouvez également ajouter l' --cachedindicateur à la réponse d'Auco pour gérer les fichiers locaux .DS_store, comme Edward Newell l'a mentionné dans sa réponse d'origine. La commande modifiée ressemble à ceci: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..cheers et merci!
Réponses:
Je pense que le problème que vous rencontrez est que dans certains commit précédents, vous avez accidentellement ajouté des
.DS_Store
fichiers au référentiel. Bien sûr, une fois qu'un fichier est suivi dans votre référentiel, il continuera d'être suivi même s'il correspond à une entrée dans un fichier .gitignore applicable.Vous devez supprimer manuellement les
.DS_Store
fichiers qui ont été ajoutés à votre référentiel. Vous pouvez utiliserUne fois supprimé, git devrait l'ignorer. Vous ne devriez la ligne suivante dans la racine de votre
.gitignore
fichier:.DS_Store
. N'oubliez pas la période!supprime uniquement
.DS_Store
du répertoire actuel. Vous pouvez utiliserpour tout supprimer
.DS_Stores
du référentiel.Astuce: comme vous ne voulez probablement jamais inclure de
.DS_Store
fichiers, créez une règle globale. Créez d'abord un.gitignore
fichier global quelque part, par exempleDites maintenant à git de l'utiliser pour tous les dépôts:
Cette page m'a aidé à répondre à votre question.
la source
Ajouter
**/.DS_Store
dans.gitignore
le sous-répertoireSi
.DS_Store
déjà engagé:Pour les ignorer dans tous les dépôts: (parfois il est nommé
._.DS_Store
)la source
git rm --cached your_file
abordfind . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
, de: stackoverflow.com/questions/18393498/…-f
soit nécessaire si vous avez des fichiers ouverts dans les dossiers pertinents:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Si .DS_Store n'a jamais été ajouté à votre référentiel git, ajoutez-le simplement à votre fichier .gitignore.
Si vous n'en avez pas, créez un fichier appelé
Dans le répertoire racine de votre application et écrivez simplement
Dedans. Cela ne permettra jamais au fichier .DS_Store de se faufiler dans votre git.
Mais s'il est déjà là, écrivez dans votre terminal:
puis validez et poussez les modifications pour supprimer le .DS_Store de votre dépôt distant:
Et maintenant, ajoutez .DS_Store à votre fichier .gitignore, puis recommencez et poussez avec les 2 derniers morceaux de code (git commit ..., git push ...)
la source
*
ou**
selon ce que vous voulez réaliser. C'est une façon de dire au shell comment naviguer dans les répertoires. Cette réponse stackoverflow l'explique entièrement stackoverflow.com/a/28199633/4092170Votre fichier .gitignore devrait ressembler à ceci:
Tant que vous n'incluez pas de barre oblique, elle est comparée au nom de fichier dans tous les répertoires. (d' ici )
la source
git rm --cached path/to/file/here
Étape 1, supprimez tous les
*.DS_store
fichiers. On peut courirmais sachez que cela
rm -f
peut être un peu dangereux si vous avez une faute de frappe! Deuxième étape: ajouterà .gitignore. Cela a fonctionné pour moi!
la source
Ajoutez
*.DS_Store
à votre fichier .gitignore. Cela fonctionne parfaitement pour moila source
Vous pouvez également ajouter l'
--cached
indicateur à la réponse d'Auco pour gérer les fichiers locaux .DS_store, comme Edward Newell l'a mentionné dans sa réponse d'origine. La commande modifiée ressemble à ceci:find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch
..cheers et merci!la source
Étape: 1) Supprimez les fichiers existants à l'aide de cette commande
trouver . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Étape: 2) Ajoutez .DS_Store dans votre fichier .gitignore
Étape: 3) Validez vos modifications dans .gitignore git add .gitignore git commit -m "supprimé .DS_Store"
la source
$ git rm ./*.DS_Store
- supprimer tous les .DS_Store de git$ echo \.DS_Store >> .gitignore
- ignorer .DS_Store à l'avenircommit & push
la source