Existem alguns arquivos sem extensão que você não quer ignorar: README, LICENSEou COPYING, INSTALL, Makefileetc., embora você sempre pode forçar a adicioná-los e então eles são monitorados
Jakub Narębski
@ JakubNarębski bom ponto. Eu incluí na minha resposta para mais visibilidade.
adicione primeiro o arquivo sem extensão que importa
em seguida, edite o seu .gitignoreconforme 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:
A resposta está totalmente correta. Mas talvez um melhor .gitignorefosse **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 ...
Willem Van Onsem
7
Observação: para trabalhar com outras regras de exclusão, este precisará ser o primeiro conjunto de regras em seu arquivo .gitignore
Erik
Você também pode incluir novamente certos arquivos sem extensão, por exemplo, com !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 !
mxmlnkn
1
**foi adicionado no Git 1.8.2. Existe alguma desvantagem em relação ao uso em !*/vez de !/**/?
mxmlnkn
@TamaMcGlinn Isso se parece com um regex: gitignore não oferece suporte para regexes.
VonC
50
*
!*/
!*.*
* 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.
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).
Boa pegada. +1. Eu tinha esquecido de atualizar minha resposta com aquela regra que usei recentemente em outras respostas de minas. Eu atualizei minha resposta de acordo.
VonC
0
Em minhas pastas, há muitos arquivos com *.c, *.h, *.txt, *.csvextensões etc. e arquivos binários sem qualquer extensão. Então, eu precisava ignorar todos os arquivos execpt *.c,*.he .gitignore, então, isso funciona para mim, a partir do .gitignoreexemplo:
*/* #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 monitoradosRespostas:
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:
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:
Isso não teria funcionado aqui de qualquer maneira.
fonte
.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 Git1.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:
fonte
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:fonte