Eu criei uma lista branca apenas para arquivos de texto.
*
!*.txt
Agora, eu tenho um arquivo de texto não rastreado em um subdiretório - sub/dir/file.txt
e isso NÃO é mostrado (ele é ignorado). Arquivos de texto no diretório raiz são mostrados, entretanto.
Por que isso acontece e como faço para corrigir isso?
.gitignore
.Respostas:
Se você tentar dessa forma, ele falhará, porque você acabará colocando os diretórios na lista negra de sua estrutura.
Para resolver, você deseja colocar na lista negra tudo o que não é um diretório e não é um dos tipos de arquivo que deseja enviar, enquanto não coloca os diretórios na lista negra .
O
.gitignore
arquivo que fará isso:Testei isso em uma lista branca de estrutura de três níveis para
.txt
arquivos na presença de*.one
,*.two
e*.three
arquivos usando um.gitignore
localizado no diretório raiz do repositório - funciona para mim. Você não terá que adicionar.gitignore
arquivos a todos os diretórios em sua estrutura.As informações que usei para descobrir a resposta vieram, entre outras coisas, deste (stackoverflow.com).
fonte
!.gitignore
, ao usar*
, não é?/*
para colocar na lista negra apenas a pasta de nível superior, mas não todas as pastas recursivamente, o que realmente significa.gitignore
que não deve olhar para as subpastas de uma pasta na lista de permissões.Uma maneira mais simples de conseguir isso é:
Isso funciona porque
gitignore
aplica padrões que não começam com/
todos os níveis abaixo do.gitignore
arquivo:Se você quiser fazer isso com arquivos dentro de um diretório , as coisas ficam mais complexas:
Isso funciona porque
gitignore
tem regras especiais para**
:A peça chave é ter certeza de não ignorar os diretórios, porque então todos os arquivos dentro desse diretório serão ignorados independentemente de outras regras.
fonte
Eu procurei por muito tempo:
Suponha que eu tenha uma grande estrutura de pastas com aproximadamente 100.000 diretórios aninhados recursivamente. Nessas pastas, existem cerca de 30.000 arquivos do tipo
.txt
(no meu caso: tipo*.md
). Ao lado desses*.md
arquivos, há, digamos, 500 GB de (mais de um milhão) de arquivos que não desejo rastrear.Eu quero que o git rastreie apenas
.txt
(ou*.md
) arquivos em todas as pastas e subdiretórios.A resposta correta deveria ser: isso não é possível no Git.
O que eu fiz em vez disso:
[editar: também não funcionou - tentei criar uma pasta com links simbólicos (ou links físicos) e usar o git lá, mas o git não segue links simbólicos e sobrescreve links físicos. Doh!]
fonte