Comment puis-je supprimer ces fichiers gênants Mac OS X .DS_Store
d'un référentiel Git?
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!'
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
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.
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.
Si vous ne parvenez pas à supprimer les fichiers car ils contiennent des modifications, utilisez:
git rm --cached -f *.DS_Store
Ouvrez le terminal et tapez "cd <ProjectPath>"
Supprimer les fichiers existants: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Ajouter ceci .DS_Store
tapez "ctrl + x"
Tapez "y"
Entrer pour sauvegarder le fichier
git add .gitignore
git commit -m '.DS_Store removed.'
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
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!'
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
Utilisez cette commande pour supprimer les fichiers existants:
find . -name '*.DS_Store' -type f -delete
Ajoutez ensuite .DS_Store
à .gitignore
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
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
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).
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.
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
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
.
Cela a fonctionné pour moi, combo de deux réponses d'en haut:
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.
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
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git Push Origin master --force
Supprimer les fichiers ignorés:
(.DS_Store)
$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
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.
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
.DS_Store
Puis cliquez sur CTRL+X > y > Hit Return
git status
Pour revoir vos modificationsgit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git Push Origin master