git ignorar exceção


326

Eu tenho um arquivo gitignore que faz o git ignorar *.dllarquivos, e esse é realmente o comportamento que eu quero. No entanto, se eu quiser uma exceção (ou seja, poder confirmar foo.dll), como posso conseguir isso?


8
possível duplicata de exceções em .gitignore
wallyk

fwiw, o avô de respostas duplicadas sobre esse tópico - um que você deve examinar - provavelmente seria Make .gitignore ignorar tudo, exceto alguns arquivos - atividade muito regular e várias boas respostas. Eu sou particularmente fã desta resposta , que parece clara e completa.
Kay V

Respostas:


447

Usar:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

Do gitignore :

Um prefixo opcional! que nega o padrão; qualquer arquivo correspondente excluído por um padrão anterior será incluído novamente. Se um padrão negado corresponder, isso substituirá as origens de padrões de precedência mais baixa.


22
Veja também formulário de resposta @Matiss Jurgelis - é importante complemento
Dan

7
Posso adicionar a exceção ao gitignore do meu projeto e não ao gitignore global? Por exemplo, se eu quisesse incluir todas as DLLs em um diretório? Meu gitignore_global está *.dllnele, e o gitignore do meu projeto tem, !Libs/*.dllmas isso não parece estar funcionando.
Joel Kinzel #

1
@ jkinz, você deve tentar !Libs/**/*.dll.
Rosberg Linhares

@RosbergLinhares Ou !**/Libs/*.dll, dependendo da estrutura da pasta.
JAB

2
Obrigado, mas em um mac, adicionar o comentário na mesma linha !foo.dllque invalidou o comando. Se eu adicionar o comentário em uma linha separada, ele funcionará.
Giacomo

261

Git ignora pastas se você escrever:

/js

mas não pode adicionar exceções se você fizer: !/js/jqueryou !/js/jquery/ou!/js/jquery/*

Você deve escrever:

/js/* 

e só então você pode, exceto subpastas como esta

!/js/jquery

44
Isso é muito importante. Obrigado!
VisioN 10/10

3
No entanto parece que você não pode adicionar pastas aninhadas, por exemplo, !/js/jquery/xyzlibnão será ignorado ...
Ignorante

2
Como o @Ignorant diz, a pasta que você "exceto" da regra de ignorar deve estar no mesmo local que o "*"
The Red Pea

3
por isso /js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? Parece uma maneira bastante engraçada de fazê-lo ... #
Imperishable Night 23/11

você realmente me ajudou.
Loyea 24/03/19

55

Você pode simplesmente git add -f path/to/foo.dll.

.gitignore ignora apenas arquivos para rastreamento usual e coisas como git add .


4
Apenas para obter mais detalhes, o -fdiz git para forçar a adição deste arquivo no repo uma vez que pode ignorá-lo primeiro por causa de sua.gitignore
RPDeshaies

Que é ótimo se você tiver apenas um arquivo, menos útil se você precisar de um padrão
Liam


15

Basta adicionar ! antes de uma regra de exclusão.

De acordo com a página de manual do gitignore :

Os padrões têm o seguinte formato:

...

  • Um prefixo opcional! que nega o padrão; qualquer arquivo correspondente excluído por um padrão anterior será incluído novamente. Se um padrão negado corresponder, isso substituirá as origens de padrões de precedência mais baixa.


4

Se você estiver trabalhando com o Visual Studio e a sua .dll estiver em uma binpasta, será necessário adicionar uma exceção para a própria pasta bin, antes de poder adicionar a exceção para o arquivo .dll. Por exemplo

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

Isso ocorre porque o .gitignorearquivo padrão do Visual Studio inclui um padrão de ignorado para[Bbin]/

Esse padrão está zapeando todas as pastas da lixeira (e, consequentemente, seu conteúdo), o que faz com que qualquer tentativa de incluir o conteúdo seja redundante (uma vez que a própria pasta já foi ignorada).

Consegui descobrir por que meu arquivo não estava sendo excedido executando

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

a partir de uma janela do Git Bash. Isso retornou o [Bbin]/padrão.


2

A solução depende da relação entre a regra de ignorar git e a regra de exceção:

  1. Arquivos / arquivos no mesmo nível: use a solução @Skilldrick .
  2. Pastas / subpastas: use a solução @Matiss Jurgelis .
  3. Arquivos / Arquivos em diferentes níveis ou Arquivos / Subpastas: você pode fazer isso:

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.