Eu tive o mesmo problema, então eu descobri que eu salvo meu arquivo .gitignore em uma unidade diferente em vez disso: face-palm:
Henry Chan
É uma péssima idéia manter as coisas no seu repositório e ignorar as alterações nele.
Yevgeniy Afanasyev 29/08
Respostas:
370
Certifique-se de que o seu .gitignoreestá na raiz do diretório de trabalho, e nesse diretório prazo git statuse copiar o caminho para o arquivo a partir da saída de status e cole-o no .gitignore.
Se isso não funcionar, é provável que seu arquivo já esteja rastreado pelo Git. Você pode confirmar isso através da saída de git status. Se o arquivo não estiver listado na seção "Arquivos não rastreados" , ele já será rastreado pelo Git e ignorará a regra do .gitignorearquivo.
O motivo para ignorar arquivos no Git é para que eles não sejam adicionados ao repositório. Se você adicionou anteriormente um arquivo que deseja ser ignorado, ele será rastreado pelo Git e as regras de ignorância correspondentes serão ignoradas. O Git faz isso porque o arquivo já faz parte do repositório.
Para realmente ignorar o arquivo, você deve rastreá-lo e removê-lo do repositório. Você pode fazer isso usando git rm --cached sites/default/settings.php. Isso remove o arquivo do repositório sem excluir o arquivo fisicamente (é o que --cachedfaz). Após confirmar essa alteração, o arquivo será removido do repositório e ignorá-lo deve funcionar corretamente.
O que você quer dizer com 'raiz do diretório de trabalho'? O diretório em que o repositório '.git' é encontrado?
Jonathan Leffler
O diretório de trabalho é o diretório em que o .gitdiretório está localizado e qual é a raiz do repositório. Como quando você clonar um repositório para /xy/, em seguida, /xy/é o seu diretório de trabalho com /xy/.git/dentro.
cutuca
3
Às vezes, você também precisará fazer um git add .depois git rm --cachedpara reconstruir adequadamente o índice.
Cooper
A ideia de verificar no status git foi brilhante. Continuei a checá-lo no Git Staging no Eclipse e o caminho estava incorreto. Obrigado!
walla
1
Eu precisava adicionar o sinalizador -r (recursivo), pois havia aninhado pastas também. No meu caso, mudei para a raiz da minha pasta git e executei o comando git rm --cached -r .vs / Where vs era a pasta de nível superior que eu queria remover do rastreamento.
Devology Ltd
106
Eu me deparo com isso, é uma pergunta antiga, mas quero que o arquivo seja rastreado, mas não em determinadas cópias de trabalho. Para fazer isso, você pode executar
Essa é realmente a resposta que eu estava procurando. Todas as outras respostas assumem que o arquivo foi adicionado com o git add, o que nem sempre é o caso. Com o Acquia Cloud, o arquivo .gitignore deve ignorar o settings.php (por exemplo), mas o arquivo é incluído no primeiro commit. Cancelando o arquivo, simplesmente exclui-lo do repositório, portanto, excluí-lo do site ao vivo ...
Patricks
Também me ajudou - obrigado! Votado. Eu suspeito que ele se aplique apenas ao repositório git local e não persistiria uma vez enviado para remoto e clonado por outros desenvolvedores?
31316 Ivan
1
Sim, é apenas local.
Mescalito
41
O .gitignore ignorará apenas os arquivos que você ainda não adicionou ao seu repositório.
Se você fez um git add .e o arquivo foi adicionado ao índice, o .gitignore não o ajudará. Você precisará fazer isso git rm sites/default/settings.phppara removê-lo e, em seguida, ele será ignorado.
thanks.but Como removo o arquivo apenas do índice e não do diretório de trabalho?
Nick.h
1
git rmdeve fazer isso, mas pode estar pedindo para você usar a opção -f que a removeria do diretório de trabalho. Eu não percebi isso além de fazer uma cópia do arquivo, fazer git rm -fe depois restaurar a cópia.
Jonescb
O mesmo homem. Faça uma cópia em algum lugar, remova-a, confirme o estado removido, adicione os arquivos novamente e veja como eles são ignorados agora.
Yevgeniy Afanasyev 29/08
18
Por favor use este comando
git rm -rf --cached .
git add .
Às vezes, os arquivos .gitignore não funcionam, mesmo que estejam corretos. O motivo pelo qual o Git ignora arquivos é que eles não são adicionados ao repositório. Se você adicionou um arquivo que deseja ignorar antes, ele será rastreado pelo Git, e todas as regras correspondentes serão ignoradas. O Git faz isso porque o arquivo já faz parte do repositório.
Há instâncias, por exemplo, arquivos de configuração de aplicativos, que eu quero rastrear no git (para que o .gitignore não funcione), mas que eu preciso alterar as configurações locais. Eu não quero que o git gerencie esses arquivos ou mostre-os como modificados. Para fazer isso, eu uso o skip-worktree:
git update-index --skip-worktree path/to/file
Você pode confirmar que os arquivos foram ignorados listando-os e verificando se há linhas começando com S para ignorar.
git ls-files -v | grep ^S
Se no futuro você quiser que o git gerencie o arquivo localmente novamente, basta executar:
git update-index --no-skip-worktree path/to/file
Mescalito acima teve uma ótima resposta, que me levou pelo caminho certo, mas
git update-index - assume o arquivo inalterado / para / ignore.php
Possui um contrato com o git, no qual: o usuário promete não alterar o arquivo e permite ao Git assumir que o arquivo da árvore de trabalho corresponde ao que está registrado no índice.
No entanto, como altero o conteúdo dos arquivos, no meu caso - skip-worktree é a melhor opção.
Outro motivo possível - algumas instâncias de clientes git em execução ao mesmo tempo . Por exemplo "git shell" + "GitHub Desktop", etc.
Isso aconteceu comigo: eu estava usando o "GitHub Desktop" como cliente principal e estava ignorando algumas novas configurações de .gitignore: commit após commit:
Você comete alguma coisa.
Em seguida, confirme: ignora as configurações de .gitignore. A confirmação inclui muitos arquivos temporários mencionados no .gitignore.
Limpar cache do git; verifique se .gitignore é UTF8; remover arquivos -> confirmar -> mover arquivos de volta; pule 1 commit - nada ajudou.
Motivo : o editor de código do Visual Studio estava sendo executado em segundo plano com o mesmo repositório aberto. O VS Code possui controle git interno, e isso cria alguns conflitos.
Solução : verifique novamente vários clientes git ocultos e use apenas um cliente git por vez, especialmente ao limpar o cache git.
onde repoassim é a "raiz" mencionada acima (eu chamaria de raiz da sua árvore de trabalho) e .gitignorecontém apenas sites/default/settings.php, o ignorar funciona para mim (e não importa se .gitignorefoi adicionado ao repositório ou não). Isso corresponde ao seu layout de repo? Se não, o que difere?
Sim. É exatamente o mesmo que o seu. Mas não funciona. Todos os outros padrões funcionam. Como eu disse, o problema certamente é relativo à pasta settings.php.
Nick.h
Eu acho que é uma péssima idéia manter as coisas no seu repositório e ignorar as alterações nele.
Yevgeniy Afanasyev 29/08
@YevgeniyAfanasyev exceto para coisas como saída de compilação, as configurações do usuário IDE, todos os outros arquivos temporários gerados pelo seu conjunto de ferramentas ...
Chris F Carroll
Eu quis dizer manter o comprometimento no repositório, não apenas os arquivos na pasta do projeto. Por que você precisaria de arquivos temporários no repositório?
Yevgeniy Afanasyev
0
Caso alguém no futuro tenha o mesmo problema que eu:
Se você usar o
*
!/**/
!*.*
truque para remover arquivos binários sem extensão, verifique se TODAS as outras linhas do gitignore estão ABAIXO. O Git lerá .gitignore da parte superior, portanto, embora eu tenha 'test.go' no meu gitignore, ele foi o primeiro no arquivo e tornou-se 'não-autorizado' depois
Respostas:
Certifique-se de que o seu
.gitignore
está na raiz do diretório de trabalho, e nesse diretório prazogit status
e copiar o caminho para o arquivo a partir da saída de status e cole-o no.gitignore
.Se isso não funcionar, é provável que seu arquivo já esteja rastreado pelo Git. Você pode confirmar isso através da saída de
git status
. Se o arquivo não estiver listado na seção "Arquivos não rastreados" , ele já será rastreado pelo Git e ignorará a regra do.gitignore
arquivo.O motivo para ignorar arquivos no Git é para que eles não sejam adicionados ao repositório. Se você adicionou anteriormente um arquivo que deseja ser ignorado, ele será rastreado pelo Git e as regras de ignorância correspondentes serão ignoradas. O Git faz isso porque o arquivo já faz parte do repositório.
Para realmente ignorar o arquivo, você deve rastreá-lo e removê-lo do repositório. Você pode fazer isso usando
git rm --cached sites/default/settings.php
. Isso remove o arquivo do repositório sem excluir o arquivo fisicamente (é o que--cached
faz). Após confirmar essa alteração, o arquivo será removido do repositório e ignorá-lo deve funcionar corretamente.fonte
.git
diretório está localizado e qual é a raiz do repositório. Como quando você clonar um repositório para/xy/
, em seguida,/xy/
é o seu diretório de trabalho com/xy/.git/
dentro.git add .
depoisgit rm --cached
para reconstruir adequadamente o índice.Eu me deparo com isso, é uma pergunta antiga, mas quero que o arquivo seja rastreado, mas não em determinadas cópias de trabalho. Para fazer isso, você pode executar
fonte
O .gitignore ignorará apenas os arquivos que você ainda não adicionou ao seu repositório.
Se você fez um
git add .
e o arquivo foi adicionado ao índice, o .gitignore não o ajudará. Você precisará fazer issogit rm sites/default/settings.php
para removê-lo e, em seguida, ele será ignorado.fonte
git rm
deve fazer isso, mas pode estar pedindo para você usar a opção -f que a removeria do diretório de trabalho. Eu não percebi isso além de fazer uma cópia do arquivo, fazergit rm -f
e depois restaurar a cópia.Por favor use este comando
Às vezes, os arquivos .gitignore não funcionam, mesmo que estejam corretos. O motivo pelo qual o Git ignora arquivos é que eles não são adicionados ao repositório. Se você adicionou um arquivo que deseja ignorar antes, ele será rastreado pelo Git, e todas as regras correspondentes serão ignoradas. O Git faz isso porque o arquivo já faz parte do repositório.
fonte
Eu tive o mesmo problema. Arquivos definidos
.gitingore
onde listados como arquivos não rastreados durante a execuçãogit status
.O motivo foi que o
.gitignore
arquivo foi salvo naUTF-16LE
codificação e não naUTF8
codificação.Depois de alterar a codificação do
.gitignore
arquivoUTF8
, funcionou para mim.fonte
O que fiz para ignorar o arquivo settings.php com sucesso:
Eu acho que se houver o arquivo confirmado no Git, ignorar não funciona como esperado. Basta excluir o arquivo e confirmar. Depois isso vai ignorar.
fonte
Há instâncias, por exemplo, arquivos de configuração de aplicativos, que eu quero rastrear no git (para que o .gitignore não funcione), mas que eu preciso alterar as configurações locais. Eu não quero que o git gerencie esses arquivos ou mostre-os como modificados. Para fazer isso, eu uso o skip-worktree:
Você pode confirmar que os arquivos foram ignorados listando-os e verificando se há linhas começando com S para ignorar.
Se no futuro você quiser que o git gerencie o arquivo localmente novamente, basta executar:
Mescalito acima teve uma ótima resposta, que me levou pelo caminho certo, mas
git update-index - assume o arquivo inalterado / para / ignore.php
Possui um contrato com o git, no qual: o usuário promete não alterar o arquivo e permite ao Git assumir que o arquivo da árvore de trabalho corresponde ao que está registrado no índice.
No entanto, como altero o conteúdo dos arquivos, no meu caso - skip-worktree é a melhor opção.
O site de Toshiharu Nishina forneceu uma excelente explicação sobre skip-worktree vs assume-inalterado: Ignore arquivos já gerenciados com o Git localmente
fonte
Outro motivo possível - algumas instâncias de clientes git em execução ao mesmo tempo . Por exemplo "git shell" + "GitHub Desktop", etc.
Isso aconteceu comigo: eu estava usando o "GitHub Desktop" como cliente principal e estava ignorando algumas novas configurações de .gitignore: commit após commit:
Motivo : o editor de código do Visual Studio estava sendo executado em segundo plano com o mesmo repositório aberto. O VS Code possui controle git interno, e isso cria alguns conflitos.
Solução : verifique novamente vários clientes git ocultos e use apenas um cliente git por vez, especialmente ao limpar o cache git.
fonte
Verifique se o .gitignore não possui uma extensão !! Não pode ser .gitignore.txt, no Windows, apenas nomeie o arquivo .gitignore. e vai funcionar.
fonte
Eu apenas tentei isso com o git 1.7.3.1 e recebi uma estrutura como:
onde
repo
assim é a "raiz" mencionada acima (eu chamaria de raiz da sua árvore de trabalho) e.gitignore
contém apenassites/default/settings.php
, o ignorar funciona para mim (e não importa se.gitignore
foi adicionado ao repositório ou não). Isso corresponde ao seu layout de repo? Se não, o que difere?fonte
Caso alguém no futuro tenha o mesmo problema que eu:
Se você usar o
truque para remover arquivos binários sem extensão, verifique se TODAS as outras linhas do gitignore estão ABAIXO. O Git lerá .gitignore da parte superior, portanto, embora eu tenha 'test.go' no meu gitignore, ele foi o primeiro no arquivo e tornou-se 'não-autorizado' depois
fonte
Eu tentei a maioria dos comandos acima no terminal VS Code e obtive erros como:
fatal: pathspec '[dir]/[file]' did not match any files
Abri o projeto no GitHub Desktop e ignorei a partir daí, e funcionou.
fonte