Como o título diz, é possível adicionar "arquivos sem pontos" ao arquivo gitignore?
Eu imagino que isso iria cuidar de todos aqueles arquivos sem extensão incômodos.
Como o título diz, é possível adicionar "arquivos sem pontos" ao arquivo gitignore?
Eu imagino que isso iria cuidar de todos aqueles arquivos sem extensão incômodos.
Respostas:
Você pode tentar uma combinação semelhante a:
*
!/**/
!*.*
Essa gitignore
regra de exclusão (um padrão negado ) deve ignorar todos os arquivos, exceto aqueles com uma extensão.
Conforme mencionado abaixo pelo Mad Physicist , a regra é:
Não é possível incluir novamente um arquivo se um diretório pai desse arquivo for excluído. (*
)
(*
: a menos que certas condições sejam atendidas no git 2.?+, veja abaixo)
É por isso que !/**/
é importante (colocar as pastas-pai na lista branca recursivamente) se quisermos colocar os arquivos na lista branca.
Mencionei a mesma regra em casos semelhantes, como:
Como Jakub Narębski comenta , você pode não querer ignorar todos arquivos sem extensão.
Meu conselho:
.gitignore
conforme mostrado acima: os arquivos já versionados não serão ignorados (mesmo se não tiverem uma extensão). Todos os outros serão ignorados.Para quaisquer arquivos futuros sem extensão que você deseja criar:
git add -f -- myFile
Observe que com git 2.9.x / 2.10 (meados de 2016?), Pode ser possível incluir novamente um arquivo se um diretório pai desse arquivo for excluído se não houver curinga no caminho incluído novamente .
Nguyễn Thái Ngọc Duy ( pclouds
) está tentando adicionar este recurso:
No entanto, uma vez que uma das regras para a reinclusão foi:
A parte do diretório nas regras de reinclusão deve ser literal (ou seja, sem curingas)
Isso não teria funcionado aqui de qualquer maneira.
.gitignore
fosse **
e !**.*
. Eu sei que isso não faz diferença se o asterisco for colocado na frente, mas é mais explícito e consistente com a forma como as conchas lidam com curingas ...
!Makefile
. Fique atento, pois tive problemas com esta solução no Git 1.7.1 enquanto funcionava bem no 1.9.0. No meu caso, adicionar um arquivo no diretório raiz funcionou bem, mas adicionar um arquivo com uma extensão dentro de um subdiretório foi mostrado como ignorado. Isso parece ser porque 1.7.1 não suportava o **
padrão ainda, veja aqui !
**
foi adicionado no Git 1.8.2
. Existe alguma desvantagem em relação ao uso em !*/
vez de !/**/
?
*
!*/
!*.*
*
diz ao git para ignorar tudo.
!*/
em seguida, remove a ignorar qualquer coisa que seja um diretório. Isso é crucial.
!*.*
cancela a ignorar todos os arquivos com uma extensão.
Sem a !*/
regra, os diretórios sem um .
no nome não seriam listados e nenhum dos arquivos desejados seria adicionado fora da pasta raiz.
Para referência, leia estas duas seções na documentação .gitignore que se destacam:
Um prefixo opcional "!" que nega o padrão; qualquer arquivo correspondente excluído por um padrão anterior será incluído novamente. Não é possível incluir novamente um arquivo se um diretório pai desse arquivo for excluído. Git não lista diretórios excluídos por motivos de desempenho, portanto, quaisquer padrões nos arquivos contidos não têm efeito, não importa onde sejam definidos. Coloque uma barra invertida ("\") antes do primeiro "!" para padrões que começam com um "!" literal, por exemplo, "! important! .txt".
Se o padrão terminar com uma barra, ele será removido para o propósito da descrição a seguir, mas apenas encontraria uma correspondência com um diretório. Em outras palavras, foo / irá corresponder a um diretório foo e caminhos abaixo dele, mas não irá corresponder a um arquivo regular ou um link simbólico foo (isso é consistente com a maneira como o pathspec funciona em geral no Git).
Em minhas pastas, há muitos arquivos com *.c, *.h, *.txt, *.csv
extensões etc. e arquivos binários sem qualquer extensão. Então, eu precisava ignorar todos os arquivos execpt *.c,*.h
e .gitignore
, então, isso funciona para mim, a partir do .gitignore
exemplo:
*/* #ignore all files in each directory
!*/*.c #unignore .c files in each directory
!*/*.h #unignore .h header files in each directory
!.gitignore #unignore .gitignore
README
,LICENSE
ouCOPYING
,INSTALL
,Makefile
etc., embora você sempre pode forçar a adicioná-los e então eles são monitorados