Adicionei a seguinte linha a .gitignore
:
sites/default/settings.php
mas quando eu digito, git status
ele mostra o arquivo como arquivo não estático.
Qual é o problema? Todos os outros padrões funcionam bem.
Adicionei a seguinte linha a .gitignore
:
sites/default/settings.php
mas quando eu digito, git status
ele mostra o arquivo como arquivo não estático.
Qual é o problema? Todos os outros padrões funcionam bem.
Respostas:
Certifique-se de que o seu .gitignore
está na raiz do diretório de trabalho, e nesse diretório prazo git 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.
.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 .
depois git 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
git update-index --assume-unchanged sites/default/settings.php
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.php
para removê-lo e, em seguida, ele será ignorado.
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, fazer git rm -f
e depois restaurar a cópia.
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.
Eu tive o mesmo problema. Arquivos definidos .gitingore
onde listados como arquivos não rastreados durante a execução git status
.
O motivo foi que o .gitignore
arquivo foi salvo na UTF-16LE
codificação e não na UTF8
codificação.
Depois de alterar a codificação do .gitignore
arquivo UTF8
, funcionou para mim.
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.
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.
O site de Toshiharu Nishina forneceu uma excelente explicação sobre skip-worktree vs assume-inalterado: Ignore arquivos já gerenciados com o Git localmente
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.
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.
Eu apenas tentei isso com o git 1.7.3.1 e recebi uma estrutura como:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
onde repo
assim é a "raiz" mencionada acima (eu chamaria de raiz da sua árvore de trabalho) e .gitignore
contém apenas sites/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?
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
!*.*
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.