Question

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

Était-ce utile?

La solution

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

vers le 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

Alors

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

Autres conseils

Combiner les réponses de benzado et webmat, mettre à jour avec git rm, ne pas é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

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

vi ~/.gitignore_global

Ajout de règles pour ignorer les 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:

Suppression des icônes car elles doivent éventuellement être validées en tant qu'actifs d'application.

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)

Editez ensuite le fichier comme un fichier .gitignore. Notez que je pense que vous devez utiliser un chemin absolu.

Si vous ne parvenez pas à supprimer les fichiers en raison de modifications apportées, utilisez:

git rm --cached -f *.DS_Store

J'ai dû changer git-rm en git rm ci-dessus pour que cela fonctionne:

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

Ouvrez le terminal et tapez " cd < ProjectPath & Gt; & Quot;

  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. Entrée pour enregistrer le fichier

  7. git add .gitignore

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

La réponse la plus votée est géniale, mais pour aider les novices 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 le placer dans le dossier suivant. Github.

Créer le fichier .gitignore

Pour créer un fichier .gitignore, vous pouvez simplement touch créer 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

Ignorer 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 est bien parce qu’il contient des instructions pour s’en sortir. ( Ctrl - O à enregistrer, Ctrl - X à quitter)

Copiez et collez certaines des idées de cet fichier Github , 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.

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

Supprimer 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 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!'

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 d'être créés tous ensemble

Utilisez cette commande pour supprimer les fichiers existants:

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

Ajoutez ensuite .DS_Store à .gitignore

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.

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 qu'il respecte globalement le fichier:

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

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


Si DS_Store est déjà validé:

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

J'ai constaté que la ligne suivante de snipplr fait de son mieux pour effacer tout .DS_Store, y compris celui comportant des modifications locales.

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

--cached conserve votre adresse locale <=> car elle sera reproduite de toute façon.

Et, comme mentionné ci-dessus, ajoutez <=> au fichier .gitignore à la racine de votre projet. Alors ce ne sera plus dans votre champ de vision.

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 de côté le " -delete & "; si vous voulez simplement les énumérer 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 dans .gitignore dans le répertoire niveau supérieur de chaque zone de travail et validez-la, de sorte que toute personne qui clonera votre rapport bénéficiera de son utilisation.

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.

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

Ma solution provient de l'exécution du terminal:

rm .DS_Store

Ensuite, exécutez la commande suivante:

git pull origin master

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

-u

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

Cela a fonctionné pour moi, combinaison de deux réponses précédentes:

  • $ 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
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force

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 shell UNIX. 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, suivez les étapes ci-dessous: Lancer 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 est appelé entrée crontab, qui a le format suivant:

Minute heure DayOfMonth Month DayOfWeek User Command.

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 jusqu'au. Si le système n’exécute 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.

ajoutez ceci à votre fichier .gitignore

#Ignore folder mac
.DS_Store

enregistrez ceci et effectuez une validation

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

et maintenant vous l'ignorez pour tous vos commits

Supprimer les fichiers ignorés:

(. DS_Store)

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

Inutile de supprimer .DS_STORE localement

Ajoutez-le simplement à .gitignore fichier

  

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

Commandes

  • nano .gitignore
  • Écrivez .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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top