web-dev-qa-db-fra.com

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

Comment puis-je supprimer ces fichiers gênants Mac OS X .DS_Store d'un référentiel Git?

1121
John Topley

Supprimer les fichiers existants du référentiel:

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

Ajouter 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 principal.

echo .DS_Store >> .gitignore

Ensuite

git add .gitignore
git commit -m '.DS_Store banished!'
2185
benzado

Combiner les réponses de benzado et webmat, mettre à jour avec git rm, sans échouer sur les fichiers trouvés qui ne sont pas dans le référentiel, et le rendre collable de manière générique pour tout 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
229
Turadg

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

vi ~/.gitignore_global

Ajout de règles pour ignorer des fichiers tels que:

# 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 git:

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

Modifier:

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

138
Nerve

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

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

(Ou n'importe quel fichier de votre choix)

Ensuite, éditez le fichier comme un fichier .gitignore de dépôt. Notez que je pense que vous devez utiliser un chemin absolu.

58
webmat

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

git rm --cached -f *.DS_Store
20
Reggie Pinkham

Ouvrez le terminal et tapez "cd <ProjectPath>"

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

  2. nano .gitignore

  3. Ajouter ceci .DS_Store

  4. tapez "ctrl + x"

  5. Tapez "y"

  6. Entrer pour sauvegarder le fichier

  7. git add .gitignore

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

17
Karthick Vadivel

Je devais changer git-rm en git rm dans ce qui précède pour que cela fonctionne:

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

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, le sauvegarder, supprimer les fichiers que vous avez peut-être déjà ajoutés à git, puis Transférer le fichier dans Github.

Créez le fichier .gitignore

Pour créer un fichier .gitignore, vous pouvez simplement touch le fichier qui crée un fichier vide avec le nom spécifié. Nous voulons créer le fichier nommé .gitignore pour pouvoir utiliser la commande suivante:

touch .gitignore

Ignore les fichiers

Vous devez maintenant ajouter la ligne qui indique à git d’ignorer les fichiers DS Store sur votre fichier .gitignore. Vous pouvez utiliser l'éditeur nano pour cela.

nano .gitignore

Nano is Nice, car il contient des instructions pour en sortir. (Ctrl-O sauver, Ctrl-X pour quitter)

Copiez et collez certaines des idées de ce Github Gist qui répertorie certains fichiers courants à 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.

This article de Github a aussi quelques idées générales et des directives.

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

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

Utilisez cette excellente commande depuis la réponse votée par le haut. 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!'

14
Joshua Dance

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

10
Nathan

Utilisez cette commande pour supprimer les fichiers existants:

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

Ajoutez ensuite .DS_Store à .gitignore

8
Sunny

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


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

Ignorez-les par:

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
7
user7718859

Ce qui suit a fonctionné le mieux pour moi. Gestion des fichiers incomparables et des fichiers avec des modifications locales. Pour référence, il s’agissait d’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 global core.excludes.

Tout d’abord, créez 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 qu'il respecte globalement le fichier:

git config --global core.excludesfile ~/.gitignore
7
jordantbro

J'ai trouvé que la ligne suivante de snipplr réussit mieux à effacer tous les .DS_Store, y compris ceux comportant des modifications locales.

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

L'option --cached conserve votre .DS_Store local car il sera reproduit de toute façon.

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

6
manat

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 faites très attention lorsque vous supprimez des 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 fichier Nice dans .gitignore dans le niveau supérieur de chaque zone de travail et le valider, de sorte que toute personne qui clone votre repo puisse en tirer le bénéfice.

5
zeozod

Pour une raison quelconque, rien de ce qui précède n'a fonctionné sur mon mac.

Ma solution provient du terminal:

rm .DS_Store

Puis lancez la commande suivante:

git pull Origin master
4
Invincible

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.

4
John Topley

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

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "filtre-branche -index-filtre 'git rm --cached --ignore-unmatch .DS_Store"
  • $ git Push Origin master --force
3
JLunceford

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.

3
dav1dhunt

ajoutez ceci à votre fichier .gitignore

#Ignore folder mac
.DS_Store

enregistrer ceci et faire commettre

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

et maintenant vous l'ignorez pour tous vos commits

2
Ezequiel García
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git Push Origin master --force
2
JZ.

Supprimer les fichiers ignorés:

(.DS_Store)

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

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 de visualiser les dossiers consiste à utiliser la ligne de commande UNIX. Pour supprimer les fichiers .DS_Store, vous pouvez utiliser un produit tiers appelé DS_Store Terminator. Pour supprimer les fichiers .DS_Store de l’ensemble du système, vous pouvez utiliser une commande UNIX Shell. Lancer le terminal à partir d'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 permet de rechercher et de supprimer toutes les occurrences de .DS_Store à partir de la racine (/) du système de fichiers sur l’ensemble de la machine. Pour configurer cette commande afin qu'elle s'exécute en tant que tâche planifiée, procédez comme suit: Démarrez le terminal à partir d'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 de l'administrateur Mac OS X. Une fois dans l'éditeur vi, appuyez une fois sur la lettre I de votre clavier et entrez les informations suivantes:

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

Ceci s'appelle l'entrée de crontab, qui a le format suivant:

Minute Hour DayOfMonth Month DayOfWeek Commande utilisateur.

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

La commande commence par rechercher tout le chemin jusqu'à. Si le système ne fonctionne pas, cette commande ne sera pas exécutée.

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

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

2
vinny

Pas besoin de retirer .DS_STORE localement

Il suffit de l'ajouter au fichier .gitignore

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

Les commandes

  • nano .gitignore
  • Ecrire .DS_Store Puis cliquez sur CTRL+X > y > Hit Return
  • git status Pour revoir vos modifications
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git Push Origin master
0
Wael Assaf