Como excluir o arquivo apenas da pasta raiz no Git

399

Estou ciente de usar o .gitignorearquivo para excluir alguns arquivos que estão sendo adicionados, mas tenho vários config.phparquivos na árvore de origem e preciso excluir apenas um, localizado na raiz, enquanto outros mantêm o controle de revisão.

O que devo escrever .gitignorepara fazer isso acontecer?

Pavel Karoukin
fonte

Respostas:

589

A partir da documentação :

Se o padrão não contém uma barra /, o git o trata como um padrão shell glob e verifica se há uma correspondência com o nome do caminho em relação à localização do arquivo .gitignore (em relação ao nível superior da árvore de trabalho, se não em um .gitignore Arquivo).

Uma barra à esquerda corresponde ao início do nome do caminho. Por exemplo, "/*.c" corresponde a "cat-file.c", mas não "mozilla-sha1 / sha1.c".

Portanto, você deve adicionar a seguinte linha à sua raiz .gitignore:

/config.php
Manoj Govindan
fonte
11
Obrigado! Tentei dessa maneira, mas por algum motivo não funcionou. Provavelmente digitado incorretamente em algum lugar algo =)
Pavel Karoukin
11
E se não for um arquivo, mas uma pasta, e eu quiser ignorá-la na raiz do repositório, seus arquivos contidos e todas as subpastas descendentes e seus arquivos? /folder/?
CodeManX 23/08/2015
11
De qualquer /folder/ou /folderiria funcionar, mas acrescentando a barra nas extremidades limita o jogo para apenas pastas. Se você tivesse um arquivo chamado 'foo' no diretório raiz, /foo/não o ignoraria, mas /foosim.
tehDorf
Caso você já tenha confirmado o arquivo, execute o comando git rm --cached <file>, caso contrário, o arquivo não será ignorado. De: stackoverflow.com/a/1274447
Bruno Polo
83

Use /config.php.

Richard Fearn
fonte
29

As versões mais antigas do git requerem que você primeiro defina um padrão de ignorância e imediatamente (na próxima linha) defina a exclusão. [testado na versão 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

Versões posteriores requerem apenas o seguinte [testado na versão 2.2.1]

/config.php
kenhowardpdx
fonte
17

Se a solução acima não funcionar, tente o seguinte:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php
drugan
fonte
Isso funciona para mim, de fato, enquanto o /config.phpsozinho não. Estou curioso por que isso não aconteceu. Você tem alguma ideia?
iago-lito 'considerando deixar o dia
@ iago-lito se você trabalha em algum projeto em particular e se esforça para ignorar algum arquivo.ext em um diretório específico e ao mesmo tempo para NÃO ignorá-lo em qualquer outro lugar, coloque-o no arquivo /home/me/.gitignore: /home/me/path/to/my/project/some/folder/file.ext OU file.ext para ignorar o arquivo em qualquer lugar e depois em / home / me / path / to / my / project / some / folder / O arquivo .gitignore coloca este! file.ext para NÃO ignorar este arquivo apenas neste diretório específico. Cada pasta pode ter seu próprio arquivo .gitignore para substituir qualquer um dos arquivos .gitignore pai (s) configurações ...
Drugan
Hum. Isso significa que o repositório pode se comportar de maneira diferente, dependendo se outros usuários têm ~/.gitignorearquivos diferentes em suas próprias máquinas, certo? .. Além disso, meu argumento era: você escreveu "Se a solução acima não funciona", por que não?
iago-lito 'considerando deixar o dia
Sim, se o seu projeto pode existir em um ambiente desconhecido, você nunca deve confiar nos arquivos .gitignore que existem acima da pasta raiz do projeto. Lembre-se de que nomes de arquivos como config.php são bastante comuns, portanto substitua qualquer configuração possivelmente existente para esse arquivo no seu arquivo .gitignore raiz.
drugan 2/02/19