Comment puis-je supprimer des fichiers .DS_Store d'un référentiel Git?

Réponses:

2432

Supprimez les fichiers existants du référentiel:

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

Ajoutez la ligne

.DS_Store

au fichier .gitignore, qui peut être trouvé au niveau supérieur de votre référentiel (ou créé s'il n'y est pas déjà). Vous pouvez le faire facilement avec cette commande dans le répertoire supérieur

echo .DS_Store >> .gitignore

alors

git add .gitignore
git commit -m '.DS_Store banished!'
benzado
la source
13
C'est vraiment trivial, mais l'utilisation -execse lancera git-rmune fois pour chaque fichier .DS_Store, tandis que xargsmettra tous les chemins sur une seule ligne de commande. Surtout je préfère xargsparce que je n'ai pas à m'inquiéter d'échapper à beaucoup de caractères spéciaux.
benzado
8
Cela devrait utiliser .git / info / exclude, pas .gitignore. Voir stackoverflow.com/questions/1753070/… pour une explication de la différence entre les deux.
Andrew Grimm
106
@Andrew: Je ne suis pas d'accord. Il ne serait jamais utile qu'un fichier .DS_Store soit archivé, donc cela a plus de sens en tant que paramètre pour tous les utilisateurs du référentiel, plutôt que quelque chose que chaque utilisateur Mac doit se rappeler de définir sur sa propre machine.
benzado
51
Est-ce que l'ajout .DS_Storeau .gitignoretravail récursivement? Autrement dit, sera-t-il également ignoré some/level/of/folders/.DS_Store?
Charlie Schliesser
71
@CharlieS Oui, si le modèle ne contient pas de barre oblique, il est comparé au nom de fichier dans tous les répertoires.
benzado
239

Combiner benzado et les réponses de webmat, mettre à jour avec git rm, ne pas échouer sur les fichiers trouvés qui ne sont pas en dépôt, et le rendre générique collable pour n'importe quel utilisateur:

# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
Turadg
la source
2
J'ai trouvé que lorsque j'utilise un dépôt git dans mon répertoire personnel (aussi appelé un dépôt "dotfiles"), avoir ~/.gitignorecomme fichier d'exclusion global est une douleur. Il y a des fichiers que je veux exclure de mon répertoire personnel que je ne veux pas ignorer globalement. J'utilise ~/.gitexcludesplutôt via la même directive:core.excludesfile
AL le X
156

La meilleure solution pour résoudre ce problème est d'ignorer globalement ces fichiers de tous les dépôts git sur votre système. Cela peut être fait en créant un fichier gitignore global comme:

vi ~/.gitignore_global

Ajout de règles pour ignorer les fichiers comme:

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Maintenant, ajoutez ce fichier à votre configuration globale de git:

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

Éditer:

Icônes supprimées car elles pourraient devoir être validées en tant qu'actifs d'application.

Nerf
la source
Vous pouvez également ajouter des règles ci-dessus dans le .gitignore de votre référentiel. Cela éloignerait ces fichiers au niveau du référentiel s'il y a plusieurs contributeurs à votre projet. Cependant, dans de tels cas, .gitignore devrait traiter les fichiers spécifiques de chaque système d'exploitation, etc. si différents développeurs utilisent un système d'exploitation différent. Comme les règles pour Linux, OSX, etc.
Nerve
Je recommanderais à chaque développeur de traiter ses fichiers spécifiques au système d'exploitation dans son propre .global_ignore, de cette façon le projet .gitignore est spécifique au projet.
mcfedr
doit fonctionner: git add .gitignore_global, pour qu'un autre programmeur ait aussi ce fichier dans son environnement local?
stackdave
58

Dans certaines situations, vous pouvez également ignorer certains fichiers globalement. Pour moi, .DS_Store est l'un d'entre eux. Voici comment:

git config --global core.excludesfile /Users/mat/.gitignore

(Ou tout fichier de votre choix)

Modifiez ensuite le fichier comme le .gitignore d'un dépôt. Notez que je pense que vous devez utiliser un chemin absolu.

webmat
la source
26

Si vous ne parvenez pas à supprimer les fichiers car ils comportent des modifications, utilisez les étapes:

git rm --cached -f *.DS_Store
Reggie Pinkham
la source
19

Ouvrez le terminal et tapez "cd <ProjectPath>"

  1. Supprimez les fichiers existants: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. Ajoute ça .DS_Store

  4. tapez "ctrl + x"

  5. Tapez "y"

  6. Entrez pour enregistrer le fichier

  7. git add .gitignore

  8. git commit -m '.DS_Store removed.'

Karthick Vadivel
la source
nano .gitignorecrée le fichier s'il n'est pas présent, cette commande doit être exécutée à partir du dossier racine du projet
Saif
17

La réponse la plus votée est géniale, mais pour aider les recrues comme moi, voici comment créer le fichier .gitignore, le modifier, l'enregistrer, supprimer les fichiers que vous avez peut-être déjà ajoutés à git, puis pousser le fichier vers Github.

Créez le fichier .gitignore

Pour créer un fichier .gitignore, vous pouvez simplement touchle fichier qui crée un fichier vierge avec le nom spécifié. Nous voulons créer le fichier nommé .gitignore afin que nous puissions utiliser la commande:

touch .gitignore

Ignorer les fichiers

Vous devez maintenant ajouter la ligne qui indique à git d'ignorer les fichiers DS Store dans votre .gitignore. Pour ce faire, vous pouvez utiliser l'éditeur nano.

nano .gitignore

Nano est sympa car il comprend des instructions pour en sortir. ( Ctrl- Opour enregistrer, Ctrl- Xpour quitter)

Copiez et collez certaines des idées de ce gistub Github qui répertorie certains fichiers communs à ignorer. Les plus importants, pour répondre à cette question, seraient:

# OS generated files #
######################
.DS_Store
.DS_Store?

Les # sont des commentaires et vous aideront à organiser votre fichier au fur et à mesure de sa croissance.

Cet article Github contient également quelques idées et directives générales.

Supprimez les fichiers déjà ajoutés à git

Enfin, vous devez réellement supprimer ces fichiers DS Store de votre répertoire.

Utilisez cette grande commande de la réponse la plus votée. Cela passera par tous les dossiers de votre répertoire et supprimera ces fichiers de git.

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

Poussez .gitignore jusqu'à Github

Dernière étape, vous devez réellement valider votre fichier .gitignore.

git status

git add .gitignore

git commit -m '.DS_Store banished!'

Joshua Dance
la source
3
la commande tactile dans vos étapes n'est pas nécessaire ... nano créera le fichier pour vous.
Corey Goldberg
1
J'ai trouvé ma propre réponse 2 ans plus tard et je l'ai utilisée. Bon travail devant moi. :)
Joshua Dance
Fonctionne parfaitement !! Merci
iUser
15

J'ai dû changer git-rm en git rm ci-dessus pour le faire fonctionner:

find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
David Kahn
la source
10

supprimez-les à l'aide de git-rm, puis ajoutez .DS_Store à .gitignorepour les empêcher d'être ajoutés à nouveau. Vous pouvez également utiliser blueharvest pour les empêcher d'être créés tous ensemble

Nathan
la source
9

Si vous souhaitez supprimer des fichiers DS_Store dans chaque dossier et sous-dossier:


En cas de DS_Store déjà engagé:

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

Ignorez-les en:

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

la source
8

Ce qui suit a fonctionné le mieux pour moi. Fichiers inégalés traités et fichiers avec modifications locales. Pour référence, c'était sur un système Mac 10.7 exécutant git 1.7.4.4.

Rechercher et supprimer:

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

J'ignore également globalement .DS_Store dans tous les référentiels en définissant un fichier core.excludesfile global.

Créez d'abord le fichier (s'il n'en existe pas déjà un):

touch ~/.gitignore

Ajoutez ensuite la ligne suivante et enregistrez:

.DS_Store

Configurez maintenant git pour respecter le fichier globalement:

git config --global core.excludesfile ~/.gitignore
jordantbro
la source
8

Utilisez cette commande pour supprimer les fichiers existants:

find . -name '*.DS_Store' -type f -delete

Ajoutez ensuite .DS_Storeà.gitignore

Ensoleillé
la source
6

J'ai trouvé que la ligne suivante de snipplr fait mieux d'effacer tout .DS_Store, y compris celle qui a des modifications locales.

find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print

--cachedoption, conserve votre local .DS_Storecar il sera de toute façon reproduit.

Et comme mentionné ci-dessus, ajoutez .DS_Storeau fichier .gitignore à la racine de votre projet. Alors ce ne sera plus à vos yeux (de repos).

manat
la source
5

Je suis un peu en retard à la fête, mais j'ai une bonne réponse. Pour supprimer les fichiers .DS_Store, utilisez les commandes suivantes à partir d'une fenêtre de terminal, mais soyez très prudent en supprimant les fichiers avec 'find'. L'utilisation d'un nom spécifique avec l'option -name est l'un des moyens les plus sûrs de l'utiliser:

cd directory/above/affected/workareas
find . -name .DS_Store -delete

Vous pouvez laisser le "-delete" si vous voulez simplement les lister avant et après. Cela vous rassurera qu'ils sont partis.

En ce qui concerne le conseil ~ / .gitignore_global: soyez prudent ici. Vous voulez placer ce joli fichier dans .gitignore dans le niveau supérieur de chaque zone de travail et le valider, de sorte que toute personne qui clone votre dépôt profite de son utilisation.

zeozod
la source
4

Cela fonctionnera:

find . -name "*.DS_Store" -type f -exec git-rm {} \;

Il supprime tous les fichiers dont le nom se termine par .DS_Store, y compris ._.DS_Store.

John Topley
la source
3
L'astérisque ne devrait pas être là.
Aristote Pagaltzis
3
l'astérisque devrait être là parce que j'ai trouvé des fichiers .DS_Store et ._. DS_Store sur mon système mac.
MutantMahesh
3
@MutantMahesh. Dans ce cas, vous en avez besoin "*.DS_Store"pour que l'astérisque soit transmis à findplutôt que développé par le shell.
TRiG
4

Pour une raison quelconque, aucun des éléments ci-dessus n'a fonctionné sur mon Mac.

Ma solution est issue du terminal run:

rm .DS_Store

Exécutez ensuite la commande suivante:

git pull origin master
Invincible
la source
3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
JZ.
la source
3

Lors de l'initialisation de votre référentiel, ignorez la commande git qui contient

-u

et cela ne devrait pas être un problème.

dav1dhunt
la source
1
Que se passe-t-il si quelqu'un d'autre a créé le référentiel et que OP se synchronise uniquement avec lui?
JWW
3

Cela a fonctionné pour moi, combo de deux réponses d'en haut:

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
  • $ git push origin master --force
JLunceford
la source
3

Supprimer les fichiers ignorés:

(.DS_Store)

$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Cubiczx
la source
3

La meilleure façon de se débarrasser de ce fichier pour toujours et de ne plus jamais avoir à s'en soucier est

créer un fichier global .gitignore:

echo .DS_Store >> ~ / .gitignore_global

Et faites savoir à git que vous souhaitez utiliser ce fichier pour tous vos référentiels:

git config --global core.excludesfile ~ / .gitignore_global Et c'est tout! .DS_Store est hors de votre chemin.

Kasem007
la source
2

Il existe quelques solutions pour résoudre ce problème. Pour éviter de créer des fichiers .DS_Store, n'utilisez pas le Finder OS X pour afficher les dossiers. Une autre façon d'afficher les dossiers consiste à utiliser la ligne de commande UNIX. Pour supprimer les fichiers .DS_Store, un produit tiers appelé DS_Store Terminator peut être utilisé. Pour supprimer les fichiers .DS_Store de tout le système, une commande shell UNIX peut être utilisée. Lancer le terminal à partir des applications: utilitaires À l'invite du shell UNIX, entrez la commande UNIX suivante: sudo find / -name ".DS_Store" -depth -exec rm {} \; Lorsque vous êtes invité à entrer un mot de passe, entrez le mot de passe de l'administrateur Mac OS X.

Cette commande consiste à rechercher et supprimer toutes les occurrences de .DS_Store à partir de la racine (/) du système de fichiers à travers la machine entière. Pour configurer cette commande pour qu'elle s'exécute en tant que tâche planifiée, suivez les étapes ci-dessous: Lancer le terminal à partir des applications: utilitaires À l'invite du shell UNIX, entrez la commande UNIX suivante:

sudo crontab -e Lorsque vous êtes invité à entrer un mot de passe, entrez le mot de passe administrateur Mac OS X. Une fois dans l'éditeur vi, appuyez une fois sur la lettre I de votre clavier et entrez ce qui suit:

15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;

C'est ce qu'on appelle l'entrée crontab, qui a le format suivant:

Minute Hour DayOfMonth Month DayOfWeek User Command.

L'entrée crontab signifie que la commande sera exécutée automatiquement par le système à 1:15 AM tous les jours par le compte appelé root.

La commande démarre à partir de la recherche jusqu'à. Si le système n'est pas en cours d'exécution, cette commande ne sera pas exécutée.

Pour enregistrer l'entrée, appuyez une fois sur la touche Échap, puis appuyez simultanément sur Maj + z + z.

Remarque: les informations de l'étape 4 concernent uniquement l'éditeur vi.

vinny
la source
2

ajoutez ceci à votre fichier .gitignore

#Ignore folder mac
.DS_Store

enregistrez ceci et faites un commit

git add -A
git commit -m "ignore .DS_Store"

et maintenant vous l'ignorez pour tous vos commits

Ezequiel García
la source
2

créer un .gitignorefichier à l'aide de la commandetouch .gitignore

et ajoutez-y les lignes suivantes

.DS_Store

enregistrez le .gitignorefichier, puis poussez-le dans votre dépôt git.

2rahulsk
la source
1

Pas besoin de supprimer .DS_STORElocalement

Il suffit de l'ajouter au .gitignorefichier

Le fichier .gitignore est juste un fichier texte qui indique à Git quels fichiers ou dossiers ignorer dans un projet.

Commandes

  • nano .gitignore
  • Ecrire .DS_Storepuis cliquerCTRL+X > y > Hit Return
  • git status Pour revoir vos modifications
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
Wael Assaf
la source