Como posso remover esses .DS_Store
arquivos irritantes do Mac OS X de um repositório Git?
Como posso remover esses .DS_Store
arquivos irritantes do Mac OS X de um repositório Git?
Respostas:
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!'
-exec
será iniciado git-rm
uma vez para cada arquivo .DS_Store, enquanto xargs
colocará todos os caminhos em uma linha de comando. Prefiro principalmente xargs
porque não preciso me preocupar em escapar de muitos caracteres especiais.
.DS_Store
ao .gitignore
trabalho recursivamente? Ou seja, isso também será ignorado some/level/of/folders/.DS_Store
?
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
~/.gitignore
como 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 ~/.gitexcludes
vez disso, uso pela mesma diretiva:core.excludesfile
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.
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.
Se você não conseguir remover os arquivos porque eles têm alterações em etapas, use:
git rm --cached -f *.DS_Store
Abra o terminal e digite "cd <ProjectPath>"
Remova os arquivos existentes:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Adicione isso .DS_Store
digite "ctrl + x"
Digite "y"
Enter para salvar o arquivo
git add .gitignore
git commit -m '.DS_Store removed.'
nano .gitignore
cria o arquivo se não estiver presente, este comando deve ser executado a partir da pasta raiz do projeto
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 touch
o 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!'
Eu tive que mudar git-rm para git rm acima para fazê-lo funcionar:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
exclua-os usando git-rm
e adicione .DS_Store para .gitignore
para impedir que eles sejam adicionados novamente. Você também pode usar o blueharvest para impedir que eles sejam criados todos juntos
Caso você queira remover os arquivos DS_Store para todas as pastas e subpastas:
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
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
Use este comando para remover os arquivos existentes:
find . -name '*.DS_Store' -type f -delete
Em seguida, adicione .DS_Store
a.gitignore
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
--cached
opção, mantém o seu local, .DS_Store
pois ele será reproduzido de qualquer maneira.
E, como mencionado acima, adicione .DS_Store
ao arquivo .gitignore na raiz do seu projeto. Então não estará mais à sua vista (de repos).
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.
Isso funcionará:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
Exclui todos os arquivos cujos nomes terminam com .DS_Store
, inclusive ._.DS_Store
.
"*.DS_Store"
, para que o asterisco seja passado ao find
invés de expandido pelo shell.
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
Isso funcionou para mim, combinação de duas respostas acima:
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.
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
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.
Não há necessidade de remover .DS_STORE
localmente
Basta adicioná-lo ao .gitignore
arquivo
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
.DS_Store
e cliqueCTRL+X > y > Hit Return
git status
Para dar uma última olhada em suas alteraçõesgit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master