.gitignore todos os arquivos .DS_Store em todas as pastas e subpastas

561

Adicionei .DS_Store ao arquivo .gitignore, mas parece que ele está ignorando apenas .DS_Store no diretório raiz, não em todas as pastas e subpastas.

Como faço para corrigir isso?

vickyqiu
fonte
Como exatamente você o adicionou ao .gitignore? Deve funcionar em todos os diretórios (funciona para mim).
Thilo
Está funcionando para mim também. Também tentei quando está no final do arquivo, se você precisar de uma nova linha (específica da plataforma), mas isso não alterou os diretórios .DS_Store em qualquer parte da hierarquia, ainda era ignorado.
precisa saber é
A pergunta que eu entendi foi: Como ignorar facilmente todas as ocorrências de .DS_Store em todos os subdiretórios sem fazer isso manualmente em todos os subdiretórios. Eu tive o mesmo problema. A resposta abaixo mostra como resolvê-lo (os últimos 2 parágrafos).
usar o seguinte comando

Respostas:

648

Eu acho que o problema que você está tendo é que, em algumas confirmações anteriores, você adicionou acidentalmente .DS_Storearquivos ao repositório. Obviamente, depois que um arquivo for rastreado em seu repositório, ele continuará sendo rastreado, mesmo que corresponda a uma entrada em um arquivo .gitignore aplicável.

Você precisa remover manualmente os .DS_Storearquivos que foram adicionados ao seu repositório. Você pode usar

git rm --cached .DS_Store

Uma vez removido, o git deve ignorá-lo. Você só deve precisar a seguinte linha na raiz do seu .gitignorearquivo: .DS_Store. Não esqueça o período!

git rm --cached .DS_Store

remove somente .DS_Storedo diretório atual. Você pode usar

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

para remover tudo .DS_Storesdo repositório.

Dica: como você provavelmente nunca deseja incluir .DS_Storearquivos, faça uma regra global. Primeiro, crie um .gitignorearquivo global em algum lugar, por exemplo

echo .DS_Store >> ~/.gitignore_global

Agora diga ao git para usá-lo em todos os repositórios:

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

Esta página me ajudou a responder sua pergunta.

Edward Newell
fonte
41
Os últimos 2 parágrafos respondem a esta pergunta. Obrigado.
petrsyn
70
´´git rm --cached .DS_Store´´ remove apenas um .DS_Store do diretório atual. Use 'encontrar. -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch´´ para remover todos os .DS_Stores do
repositório
4
Uma lista de outros arquivos comuns para ignorar pode ser útil
geotheory
14
Má idéia para usar a regra global IMO: Tentar manter configurações globais em vários usuários / máquinas nunca funciona - você deseja as regras que regem seu repositório no próprio repositório. Concordo com isto
Yarin 25/03
15
Eu não concordo com você. (Embora tenha votado positivamente no seu comentário, pois acho que é interessante.) Se fizermos global, todos os usuários de Mac precisarão fazer isso, mas apenas uma vez. Se fizermos todo o repositório, precisamos fazer isso para cada repositório. Não sei sobre você, mas faço novos repositórios o tempo todo. Ao fazer isso globalmente, resolve-se o problema de uma vez por todas.
Edward Newell
356

Adicionar **/.DS_Storeem .gitignorepara o diretório sub


Se .DS_Storejá confirmado:

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

Para ignorá-los em todo o repositório: (às vezes chamado ._.DS_Store)

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
ronald8192
fonte
ainda carregado no meu repo?
Freddy Sidauruk
@FreddySidauruk use git rm --cached your_filefirst
ronald8192
@FreddySidauruk Deve ser find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch, de: stackoverflow.com/questions/18393498/…
ronald8192
1
Parece que a adição -fé necessária se você tiver arquivos abertos nas pastas relevantes:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan
158

Se .DS_Store nunca foi adicionado ao seu repositório git, basta adicioná-lo ao seu arquivo .gitignore.

Se você não tiver um, crie um arquivo chamado

.gitignore

No diretório raiz do seu aplicativo e simplesmente escreva

**/.DS_Store

Iniciar. Isso nunca permitirá que o arquivo .DS_Store entre no seu git.

Mas, se já estiver lá, escreva no seu terminal:

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

em seguida, confirme e envie as alterações para remover o .DS_Store do seu repositório remoto:

git commit -m "Remove .DS_Store from everywhere"

git push origin master

E agora adicione .DS_Store ao seu arquivo .gitignore e, em seguida, confirme e envie novamente com os 2 últimos pedaços de código (git commit ..., git push ...)

drjorgepolanco
fonte
3
Por que duplicar o asterisco? O que isso significa?
MilanG 16/01
1
@MilanG é uma palavra-chave que significa basicamente 'pesquisar neste diretório e em todos os subdiretórios'.
lachie_h
1
Não tenho certeza de que é uma explicação perfeita do significado do asterisco duplo. É um curinga. Poderia *ou **dependendo do que você deseja alcançar. É uma maneira de dizer ao shell como navegar nos diretórios. Esta resposta stackoverflow explica totalmente stackoverflow.com/a/28199633/4092170
El'Magnifico
** nunca correspondem ocultas (./) diretórios: facelessuser.github.io/wcmatch/glob
Jonathan
isso realmente funciona ... deve marcada como respondida
ichimaru
85

Seu arquivo .gitignore deve ficar assim:

# Ignore Mac DS_Store files
.DS_Store

Contanto que você não inclua uma barra, ela será comparada com o nome do arquivo em todos os diretórios. ( daqui )

Yarin
fonte
ele ainda está uplaoded em repo
Freddy Sidauruk
@FreddySidauruk então você tem que corrergit rm --cached path/to/file/here
SGNL
23

Etapa 1, exclua todos os *.DS_storearquivos. Pode-se correr

git rm -f *.DS_Store

mas esteja ciente de que rm -fpode ser um pouco perigoso se você tiver um erro de digitação! Etapa 2: adicionar

*.DS_Store
.DS_Store

para .gitignore. Isso funcionou para mim!

travelbones
fonte
13

Adicione *.DS_Storeao seu arquivo .gitignore. Isso funciona para mim perfeitamente

Jacob
fonte
11

Você também pode adicionar o --cachedsinalizador à resposta do auco para manter os arquivos .DS_store locais, como Edward Newell mencionou em sua resposta original. O comando modificado fica assim: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..cheers e obrigado!

Andrew Wilhelm
fonte
5

Etapa: 1) Remova os arquivos existentes usando este comando

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

Etapa: 2) Adicione .DS_Store ao seu arquivo .gitignore

Etapa: 3) Confirme suas alterações no arquivo .gitignore git add .gitignore git commit -m "removed .DS_Store"

vishnu
fonte
3
  1. $ git rm ./*.DS_Store - remova todos os .DS_Store do git
  2. $ echo \.DS_Store >> .gitignore - ignore .DS_Store no futuro

confirmar e empurrar

mate.gwozdz
fonte