Eu tenho um arquivo gitignore que faz o git ignorar *.dll
arquivos, 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?
Eu tenho um arquivo gitignore que faz o git ignorar *.dll
arquivos, 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?
Respostas:
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.
*.dll
nele, e o gitignore do meu projeto tem, !Libs/*.dll
mas isso não parece estar funcionando.
!Libs/**/*.dll
.
!**/Libs/*.dll
, dependendo da estrutura da pasta.
!foo.dll
que invalidou o comando. Se eu adicionar o comentário em uma linha separada, ele funcionará.
Git ignora pastas se você escrever:
/js
mas não pode adicionar exceções se você fizer:
!/js/jquery
ou !/js/jquery/
ou!/js/jquery/*
Você deve escrever:
/js/*
e só então você pode, exceto subpastas como esta
!/js/jquery
!/js/jquery/xyzlib
não será ignorado ...
/js/*
, !/js/jquery
, /js/jquery/*
, !/js/jquery/xyzlib
? Parece uma maneira bastante engraçada de fazê-lo ... #
Você pode simplesmente git add -f path/to/foo.dll
.
.gitignore
ignora apenas arquivos para rastreamento usual e coisas como git add .
-f
diz git para forçar a adição deste arquivo no repo uma vez que pode ignorá-lo primeiro por causa de sua.gitignore
Para excluir tudo em um diretório, mas alguns subdiretórios, faça o seguinte:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
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.
!foo.dll
em .gitignore, ou (sempre!) git add -f foo.dll
Se você estiver trabalhando com o Visual Studio e a sua .dll estiver em uma bin
pasta, 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 .gitignore
arquivo 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.
A solução depende da relação entre a regra de ignorar git e a regra de exceção:
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
Desde o Git 2.7.0, o Git leva em consideração as exceções. Das notas oficiais de lançamento:
- Permita que um "! / Abc / def" posterior substitua um "/ abc" anterior que apareça no mesmo arquivo .gitignore para facilitar a expressão "tudo no diretório / abc é ignorado, exceto ...".
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt