Como posso remover arquivos .DS_Store de um repository Git?

Como posso remover esses arquivos irritantes do Mac OS .DS_Store de um repository Git?

Remova os arquivos existentes do repository:

 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 repository (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!' 

Combinando respostas de benzado e webmat, atualizando com git rm , não falhando em arquivos encontrados que não estão em repo, e tornando-o genericamente colável 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 

A melhor solução para resolver esse problema é globalmente ignorar esses arquivos de todos os git repos em 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 podem precisar ser confirmados como ativos de aplicativo.

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

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

(Ou qualquer arquivo de sua escolha)

Em seguida, edite o arquivo como se fosse um .gitignore de repo. Note que eu acho que você tem que usar um caminho absoluto.

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

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

Se você não conseguir remover os arquivos porque eles possuem alterações, use:

 git rm --cached -f *.DS_Store 

Abra o terminal e digite “cd

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

  2. nano .gitignore

  3. Adicione isto .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.'

exclua-os usando git-rm e, em seguida, adicione .DS_Store a .gitignore para impedi-los de serem adicionados novamente. Você também pode usar o blueharvest para impedi-los de serem criados juntos

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á tenha adicionado ao git e, em seguida, empurrar o arquivo para o Github.

Crie o arquivo .gitignore

Para criar um arquivo .gitignore, basta touch no arquivo que cria um arquivo em branco com o nome especificado. Queremos criar o arquivo chamado .gitignore para podermos usar o comando:

touch .gitignore

Ignore os arquivos

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

nano .gitignore

O Nano é legal porque inclui instruções sobre como sair dele. ( CtrlO para salvar, CtrlX para sair)

Copie e cole algumas das idéias desse 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? 

O # são comentários e o ajudarão a organizar seu arquivo à medida que ele cresce.

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

Remova os arquivos já adicionados ao git

Finalmente, você precisa realmente remover os arquivos do DS Store do seu diretório.

Use esse ótimo comando da resposta mais votada. Isto irá passar por 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

Empurre .gitignore para o Github

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

git status

git add .gitignore

git commit -m '.DS_Store banished!'

O seguinte funcionou melhor para mim. Manipular arquivos não correspondentes e arquivos com modificações locais. Para referência, isso foi 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 globalmente ignoro .DS_Store em todos os repositorys, definindo um 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 

Descobri que a seguinte linha do snipplr é melhor para limpar todos os .DS_Store, incluindo um que tenha modificações locais.

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

– opção em cache, mantém o seu local .DS_Store, uma vez que vai ser reproduzido de qualquer maneira.

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

Use este comando para remover os arquivos existentes:

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

Em seguida, adicione .DS_Store para .gitignore

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 de 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 o “-delete” se quiser simplesmente listá-los antes e depois. Isso irá assegurar-lhe que eles se foram.

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

Por alguma razão, nenhuma das anteriores funcionou no meu mac.

Minha solução é de terminal

  rm .DS_Store 

Então

  git pull origin master 

Ao inicializar seu repository, pule o comando git que contém

 -u 

e isso não deve ser um problema.

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

  • $ git rm –cached -f * .DS_Store
  • $ git commit -m “filtro-ramo –index-filter ‘git rm –gavascript –ignore-unmatch .DS_Store”
  • $ git push origem master –force

Isso vai funcionar:

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

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

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


No caso de DS_Store já comprometida:

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

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 do UNIX pode ser usado. Inicie o Terminal nos Aplicativos: Utilitários No prompt do shell UNIX, digite o seguinte comando UNIX: sudo find / -name “.DS_Store” -depth -exec rm {} \; Quando for solicitada uma senha, digite a senha do Administrador do Mac OS X.

Este comando é para localizar e remover todas as ocorrências de .DS_Store a partir da raiz (/) do sistema de arquivos através de 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 do UNIX:

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

15 1 * * * root find / -name “.DS_Store” -depth -exec rm {} \;

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

Hora de Minuto DayOfMês de Mês DayOfWeek User Command.

A input crontab significa que o comando será executado pelo sistema automaticamente às 01:15 todos os dias pela conta chamada root.

O comando começa de encontrar todo o caminho para. Se o sistema não estiver rodando, este comando não será executado.

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

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

adicione isto 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 por todos os seus commits

Remova arquivos ignorados:

(.DS_Store)

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