Como posso remover arquivos .DS_Store de um repositório Git?

Respostas:

2430

Remova os arquivos existentes do repositório:

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

Adicione a linha

.DS_Store

para o arquivo .gitignore, que pode ser encontrado no nível superior do seu repositório (ou criado, se já não estiver lá). Você pode fazer isso facilmente com este comando no diretório superior

echo .DS_Store >> .gitignore

Então

git add .gitignore
git commit -m '.DS_Store banished!'
benzado
fonte
13
É realmente trivial, mas o uso -execserá iniciado git-rmuma vez para cada arquivo .DS_Store, enquanto xargscolocará todos os caminhos em uma linha de comando. Prefiro principalmente xargsporque não preciso me preocupar em escapar de muitos caracteres especiais.
benzado
8
Isso deve usar .git / info / exclude, não .gitignore. Consulte stackoverflow.com/questions/1753070/… para obter uma explicação da diferença entre os dois.
Andrew Grimm
106
@ Andrew: Eu não concordo. Nunca seria útil fazer o check-in de um arquivo .DS_Store, por isso faz mais sentido como uma configuração para todo o repositório e para todos os usuários, em vez de algo que cada usuário de Mac precisa se lembrar de configurar em sua própria máquina.
benzado
51
A adição .DS_Storeao .gitignoretrabalho recursivamente? Ou seja, isso também será ignorado some/level/of/folders/.DS_Store?
Charlie Schliesser
70
@CharlieS Sim, se o padrão não contiver uma barra, será comparado com o nome do arquivo em todos os diretórios.
benzado
239

Combinando as respostas do benzado e do webmat, atualizando com git rm, sem falhar nos arquivos encontrados que não estão no repositório, e tornando-o capaz de colar genericamente para qualquer usuário:

# 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
Turadg
fonte
2
Eu descobri que ao usar um repositório git no meu diretório pessoal (também conhecido como repositório "dotfiles"), ter ~/.gitignorecomo meu arquivo de exclusão global é um problema. Há arquivos que quero excluir do meu diretório pessoal que não quero ignorar globalmente. Em ~/.gitexcludesvez disso, uso pela mesma diretiva:core.excludesfile
AL o X
156

A melhor solução para resolver esse problema é ignorar globalmente esses arquivos de todos os repositórios git no seu sistema. Isso pode ser feito criando um arquivo gitignore global como:

vi ~/.gitignore_global

Adicionando regras para ignorar arquivos como:

# 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

Agora, adicione este arquivo à sua configuração global do git:

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

Editar:

Ícones removidos, pois eles podem precisar ser confirmados como ativos do aplicativo.

Nervo
fonte
Você também pode adicionar regras acima no .gitignore do seu repositório. Isso manteria esses arquivos afastados no nível do repositório, se houver vários colaboradores no seu projeto. No entanto, nesses casos, o .gitignore deve lidar com os arquivos específicos de todos os sistemas operacionais, etc., se diferentes desenvolvedores estiverem usando sistemas operacionais diferentes. Como regras para linux, OSX etc.
Nerve 13/07/2013
Eu recomendaria que cada desenvolvedor lidasse com seus arquivos específicos de SO em seu próprio .global_ignore, para que o projeto .gitignore seja específico do projeto.
mcfedr
deve executar: git add .gitignore_global, para que outros programadores também tenham esse arquivo em seu ambiente local?
stackdave
58

Em algumas situações, você também pode querer ignorar alguns arquivos globalmente. Para mim, .DS_Store é um deles. Aqui está como:

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

(Ou qualquer arquivo de sua escolha)

Em seguida, edite o arquivo como o .gitignore de um repositório. Note que eu acho que você precisa usar um caminho absoluto.

webmat
fonte
26

Se você não conseguir remover os arquivos porque eles têm alterações em etapas, use:

git rm --cached -f *.DS_Store
Reggie Pinkham
fonte
19

Abra o terminal e digite "cd <ProjectPath>"

  1. Remova os arquivos existentes: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. Adicione isso .DS_Store

  4. digite "ctrl + x"

  5. Digite "y"

  6. Enter para salvar o arquivo

  7. git add .gitignore

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

Karthick Vadivel
fonte
nano .gitignorecria o arquivo se não estiver presente, este comando deve ser executado a partir da pasta raiz do projeto
Saif
17

A resposta mais votada é incrível, mas, ajudando os novatos como eu, aqui está como criar o arquivo .gitignore, editá-lo, salvá-lo, remover os arquivos que você já adicionou ao git e enviar o arquivo para o Github.

Crie o arquivo .gitignore

Para criar um arquivo .gitignore, você pode apenas toucho arquivo que cria um arquivo em branco com o nome especificado. Queremos criar o arquivo chamado .gitignore, para que possamos usar o comando:

touch .gitignore

Ignore os arquivos

Agora você precisa adicionar a linha que diz ao git para ignorar os arquivos da DS Store no seu .gitignore. Você pode usar o editor nano para fazer isso.

nano .gitignore

O Nano é bom porque inclui instruções sobre como sair dele. ( Ctrl- Opara salvar, Ctrl- Xpara sair)

Copie e cole algumas das idéias desta lista do Github, que lista alguns arquivos comuns a serem ignorados. Os mais importantes, para responder a essa pergunta, seriam:

# OS generated files #
######################
.DS_Store
.DS_Store?

Os # são comentários e ajudarão você a organizar seu arquivo à medida que cresce.

Este artigo no Github também tem algumas idéias e diretrizes gerais.

Remova os arquivos já adicionados ao git

Por fim, você precisa remover realmente esses arquivos da DS Store do seu diretório.

Use este ótimo comando da resposta mais votada. Isso examinará todas as pastas do seu diretório e removerá esses arquivos do git.

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

Pressione .gitignore até o Github

Última etapa, você precisa realmente confirmar seu arquivo .gitignore.

git status

git add .gitignore

git commit -m '.DS_Store banished!'

Joshua Dance
fonte
3
o comando touch em suas etapas não é necessário ... o nano criará o arquivo para você.
Corey Goldberg #
1
Encontrei minha própria resposta 2 anos depois e a usei. Bom trabalho além de mim. :)
Joshua Dance
Funcionou perfeitamente !! Obrigado
iUser
15

Eu tive que mudar git-rm para git rm acima para fazê-lo funcionar:

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

exclua-os usando git-rme adicione .DS_Store para .gitignorepara impedir que eles sejam adicionados novamente. Você também pode usar o blueharvest para impedir que eles sejam criados todos juntos

Nathan
fonte
9

Caso você queira remover os arquivos DS_Store para todas as pastas e subpastas:


No caso de DS_Store já confirmado:

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

Ignore-os por:

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

fonte
8

O seguinte funcionou melhor para mim. Arquivos incomparáveis ​​manipulados e arquivos com modificações locais. Para referência, isso ocorreu em um sistema Mac 10.7 executando o git 1.7.4.4.

Encontre e remova:

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

Eu também ignoro globalmente .DS_Store em todos os repositórios, definindo um arquivo core.excludesfile global.

Primeiro, crie o arquivo (se ainda não existir):

touch ~/.gitignore

Em seguida, adicione a seguinte linha e salve:

.DS_Store

Agora configure o git para respeitar o arquivo globalmente:

git config --global core.excludesfile ~/.gitignore
jordantbro
fonte
8

Use este comando para remover os arquivos existentes:

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

Em seguida, adicione .DS_Storea.gitignore

Ensolarado
fonte
6

Eu descobri que a seguinte linha do snipplr é melhor em limpar tudo .DS_Store, incluindo uma que possui modificações locais.

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

--cachedopção, mantém o seu local, .DS_Storepois ele será reproduzido de qualquer maneira.

E, como mencionado acima, adicione .DS_Storeao arquivo .gitignore na raiz do seu projeto. Então não estará mais à sua vista (de repos).

manat
fonte
5

Estou um pouco atrasado para a festa, mas tenho uma boa resposta. Para remover os arquivos .DS_Store, use os seguintes comandos em uma janela do terminal, mas tenha muito cuidado ao excluir arquivos com 'find'. Usar um nome específico com a opção -name é uma das maneiras mais seguras de usá-lo:

cd directory/above/affected/workareas
find . -name .DS_Store -delete

Você pode deixar de lado o "-delete" se quiser simplesmente listá-los antes e depois. Isso vai garantir que eles se foram.

Com relação ao conselho ~ / .gitignore_global: tenha cuidado aqui. Você deseja colocar esse arquivo legal em .gitignore no nível superior de cada área de trabalho e enviá-lo, para que qualquer pessoa que clone seu repositório obtenha o benefício de seu uso.

zeozod
fonte
4

Isso funcionará:

find . -name "*.DS_Store" -type f -exec git-rm {} \;

Exclui todos os arquivos cujos nomes terminam com .DS_Store, inclusive ._.DS_Store.

John Topley
fonte
3
O asterisco não deve estar lá.
Aristóteles Pagaltzis 20/09/08
3
o asterisco deve estar lá porque encontrei os arquivos .DS_Store e ._. DS_Store no meu sistema mac.
MutantMahesh
3
@MutantMahesh. Nesse caso, você precisa "*.DS_Store", para que o asterisco seja passado ao findinvés de expandido pelo shell.
TRiG 26/09/16
4

Por alguma razão, nenhuma das opções acima funcionou no meu mac.

Minha solução é do terminal:

rm .DS_Store

Em seguida, execute o seguinte comando:

git pull origin master
Invencível
fonte
3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
JZ.
fonte
3

Ao inicializar seu repositório, pule o comando git que contém

-u

e não deve ser um problema.

dav1dhunt
fonte
1
E se alguém criou o repositório e o OP está sincronizando apenas com ele?
JWW
3

Isso funcionou para mim, combinação de duas respostas acima:

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "filtro-filial - filtro de índice 'git rm --cached --ignore-unmatch .DS_Store"
  • $ git push origin master --force
JLunceford
fonte
3

Remova os arquivos ignorados:

(.DS_Store)

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

Existem algumas soluções para resolver esse problema. Para evitar a criação de arquivos .DS_Store, não use o OS X Finder para visualizar pastas. Uma maneira alternativa de visualizar pastas é usar a linha de comando do UNIX. Para remover os arquivos .DS_Store, um produto de terceiros chamado DS_Store Terminator pode ser usado. Para excluir os arquivos .DS_Store de todo o sistema, um comando shell UNIX pode ser usado. Iniciar terminal a partir de aplicativos: Utilitários No prompt do shell do UNIX, digite o seguinte comando do UNIX: sudo find / -name ".DS_Store" -thp -exec rm {} \; Quando uma senha for solicitada, digite a senha de administrador do Mac OS X.

Este comando é para localizar e remover todas as ocorrências de .DS_Store iniciando na raiz (/) do sistema de arquivos por toda a máquina. Para configurar esse comando para ser executado como uma tarefa agendada, siga as etapas abaixo: Inicie o Terminal a partir de aplicativos: Utilitários No prompt do shell do UNIX, digite o seguinte comando UNIX:

sudo crontab -e Quando for solicitada uma senha, digite a senha de administrador do Mac OS X. Uma vez no editor vi, pressione a letra I no teclado uma vez e digite o seguinte:

15 1 * * * localizador raiz / -name ".DS_Store" -thp -exec rm {} \;

Isso é chamado de entrada crontab, que tem o seguinte formato:

Minuto Hora DayOfMonth Month DayOfWeek Comando do usuário.

A entrada crontab significa que o comando será executado automaticamente pelo sistema às 1:15 da manhã todos os dias pela conta chamada root.

O comando começa a partir de encontrar todo o caminho até. Se o sistema não estiver executando, este comando não será executado.

Para salvar a entrada, pressione a tecla Esc uma vez e, simultaneamente, pressione Shift + z + z.

Nota: As informações na Etapa 4 são apenas para o editor vi.

vinny
fonte
2

adicione isso ao seu arquivo .gitignore

#Ignore folder mac
.DS_Store

salve isso e faça commit

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

e agora você ignora isso para todos os seus commits

Ezequiel García
fonte
2

crie um .gitignorearquivo usando o comandotouch .gitignore

e adicione as seguintes linhas

.DS_Store

salve o .gitignorearquivo e envie-o ao seu repositório git.

2rahulsk
fonte
2

A melhor maneira de se livrar desse arquivo para sempre e nunca mais se preocupar com isso é

crie um arquivo .gitignore global:

eco .DS_Store >> ~ / .gitignore_global

E informe ao git que você deseja usar este arquivo para todos os seus repositórios:

git config --global core.excludesfile ~ / .gitignore_global E é isso! .DS_Store está fora do seu caminho.

Kasem007
fonte
1

Não há necessidade de remover .DS_STORE localmente

Basta adicioná-lo ao .gitignorearquivo

O arquivo .gitignore é apenas um arquivo de texto que informa ao Git quais arquivos ou pastas devem ser ignorados em um projeto.

Comandos

  • nano .gitignore
  • Escreva .DS_Storee cliqueCTRL+X > y > Hit Return
  • git status Para dar uma última olhada em suas alterações
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
Wael Assaf
fonte