1796 votes

Comment puis-je supprimer les fichiers .DS_Store d'un dépôt Git ?

Comment puis-je supprimer ces ennuyeux Mac OS X .DS_Store des fichiers d'un dépôt Git ?

7 votes

0 votes

Je pense que c'est la même chose dans de nombreuses versions de MacOS, pas seulement Mac OS X.

1 votes

Vérifiez https://github.com/xiaozhuai/odourless j'ai créé un outil permettant d'empêcher l'utilisation de .DS_Store.

3466voto

benzado Points 36367

Supprimer les fichiers existants du référentiel :

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

Ajoutez cette ligne :

.DS_Store

dans le fichier .gitignore qui se trouve au niveau supérieur de votre référentiel (ou créez le fichier s'il n'est pas déjà là). Vous pouvez le faire facilement avec cette commande dans le répertoire supérieur :

echo .DS_Store >> .gitignore

Ensuite, livrez le fichier au dépôt :

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

0 votes

Vous pourriez également utiliser l'option exec pour trouver . -name .DS_Store -exec git-rm {} \ ; Ce serait une commande en moins.

21 votes

C'est vraiment trivial, mais en utilisant -exec lancera git-rm une fois pour chaque fichier .DS_Store, alors que xargs mettra tous les chemins sur une seule ligne de commande. En général, je préfère xargs car je n'ai pas à m'inquiéter de l'échappement de nombreux caractères spéciaux.

10 votes

Cela devrait utiliser .git/info/exclude, et non .gitignore. Voir stackoverflow.com/questions/1753070/ pour une explication de la différence entre les deux.

292voto

Turadg Points 3621

Combinaison des réponses de benzado et webmat, mise à jour avec git rm , ne pas échouer sur les fichiers trouvés qui ne sont pas dans le repo, 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

3 votes

J'ai constaté qu'en utilisant un dépôt git dans mon répertoire personnel (alias un dépôt "dotfiles"), le fait d'avoir ~/.gitignore comme mon fichier d'exclusions global est une douleur. Il y a des fichiers que je veux exclure de mon répertoire personnel et que je Ne le fais pas. veulent ignorer globalement. J'utilise ~/.gitexcludes à la place via la même directive : core.excludesfile

225voto

Nerve Points 1181

La meilleure solution pour résoudre ce problème est d'ignorer globalement ces fichiers dans tous les dépôts git de votre système. Ceci 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

Edit :

Suppression des icônes car elles pourraient avoir besoin d'être engagées en tant que ressources d'application.

0 votes

Vous pouvez également ajouter les règles ci-dessus dans le .gitignore de votre dépôt. Cela permet d'éloigner ces fichiers au niveau du dépôt s'il y a plusieurs contributeurs à votre projet. Cependant, dans de tels cas, le fichier .gitignore devrait traiter les fichiers spécifiques à chaque système d'exploitation, etc. si différents développeurs utilisent différents systèmes d'exploitation. Comme des règles pour linux, OSX etc.

4 votes

Je recommande que chaque développeur traite ses fichiers spécifiques à son système d'exploitation dans son propre .global_ignore, de cette façon le .gitignore du projet est spécifique au projet.

0 votes

Doit lancer : git add .gitignore_global , afin qu'un autre programmeur ait aussi ce fichier dans son environnement local ?

68voto

webmat Points 13359

Dans certaines situations, vous pouvez également vouloir ignorer certains fichiers de manière globale. Pour moi, .DS_Store est l'un d'entre eux. Voici comment faire :

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

(Ou tout autre fichier de votre choix)

Puis éditez le fichier comme le .gitignore d'un repo. Notez que je pense que vous devez utiliser un chemin absolu.

19voto

David Kahn Points 111

J'ai dû remplacer git-rm par git rm dans le texte ci-dessus pour que cela fonctionne :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X