Ignorando diretórios nos repositórios Git no Windows

1106

Como posso ignorar diretórios ou pastas no Git usando o msysgit no Windows?

sf.
fonte
Deseja que a pasta de cache seja excluída completamente do repositório ou apenas seu conteúdo?
Gareth
1
Estou supondo que o OP tenha vários diretórios de cache, cujo conteúdo deve ser ignorado, mas deseja garantir que esses diretórios sejam criados para quem clona o repositório.
Mark Longair
@ Gareth: como as pastas vazias não são rastreadas com o git, se o conteúdo for ignorado, a pasta também será, não é?
Eckes
3
Eu só mencionei isso porque algumas pessoas usam arquivos escondidos (comumente .gitkeep) para indicar um diretório que deve ser mantido
Gareth
2
é /no final o que o faz saber que é um diretório que ele deve ignorar?
Charlie Parker

Respostas:

1595

Crie um arquivo nomeado .gitignoreno diretório do seu projeto. Ignore os diretórios inserindo o nome do diretório no arquivo (com uma barra anexada):

dir_to_ignore/

Mais informações estão aqui .

ensopado
fonte
130
Em um prompt do cmd do Windows, você pode usar 'edit .gitignore' ou 'notepad .gitignore' para criar o arquivo correto.
Joey Green
44
Ou você também pode usar 'touch .gitignore' no prompt de comando do Windows git bash e isso criará o arquivo nomeado corretamente, que por sua vez poderá ser editado pelo bloco de notas ou algo semelhante ...
SGB
39
Ou apenas crie um arquivo chamado .gitignore. com o explorer e edite-o com o bloco de notas (o ponto à direita será removido). Dessa forma, você não precisa usar o prompt de comando.
P. Galbraith
6
Ou você pode vim .gitignore do terminal. :)
MollyCat
34
Ou, que surpreendentemente não foi mencionado, mesmo que seja o caminho mais rápido, basta digitar "echo folder_to_ignore >> .gitignore" no console.
Godsmith
205

Por padrão, o Windows Explorer será exibido .gitignorequando, de fato, o nome do arquivo for .gitignore.txt.

Git não usará .gitignore.txt

E você não pode renomear o arquivo para .gitignore, porque o Windows Explorer acha que é um arquivo do tipo gitignore sem nome.

Solução sem linha de comando:

Você pode renomear um arquivo para ".gitignore". e criará ".gitignore"
brainwavedave
fonte
46
Isso funciona? Eu sempre disse às pessoas para abrir o bloco de notas e, na caixa de diálogo Salvar como, digite o nome do arquivo entre aspas duplas, por exemplo, ".gitignore"e ele o salva sem adicionar automaticamente uma extensão.
Arrowmaster
9
Arrumado. Incluir um período à direita funciona. O Explorer retira o último período, resultando em um arquivo chamado ".gitignore". Eu acho que o método de cotações é mais limpo e menos provável de criar surpresas.
Triynko 8/09/11
4
Ou, na caixa de diálogo Salvar como, altere o tipo de arquivo para "Todos os arquivos ( . )" - o Windows não acrescentará nenhuma extensão.
OsakaWebbie
5
ou em bash git basta digitar ".gitignore toque" na sua pasta
Rayjax
3
".gitignore."- Isso é ótimo truque! Eu sempre tive problemas com .htaccessbem ...
Obmerk Kronen
105

Parece que, para ignorar arquivos e diretórios, existem duas maneiras principais:

  1. .gitignore

    • Colocando o .gitignorearquivo na raiz do seu repositório além da .gitpasta (no Windows, verifique a verdadeira extensão do arquivo e, em seguida, faça .gitignore.(com o ponto no final para criar uma extensão de arquivo vazia))
    • Fazendo a configuração global ~/.gitignore_globale executando git config --global core.excludesfile ~/.gitignore_globalpara adicionar isso à sua configuração do Git

    Nota: os arquivos rastreados antes podem ser rastreados executando git rm --cached filename

  2. Exclusão de repositório - Para arquivos locais que não precisam ser compartilhados, basta adicionar o padrão ou o diretório ao arquivo .git/info/exclude. Essas regras não são confirmadas e, portanto, não são vistas por outros usuários . Mais informações estão aqui .

Para fazer exceções na lista de arquivos ignorados, consulte esta pergunta .

Vairis
fonte
36
bom trabalho apontando o git rm --cached <filename>. Absolutamente crítico para repositórios que existiam ANTES de você criar o.gitignore
MaurerPower
2
git rm --cached <filename> fixa o problema que eu estava tendo com .gitignore :)
JeremyFelix
1
Sim, o nome do arquivo git rm --cached é absolutamente crucial. Isso estava me deixando louco, já que o git ainda preparava arquivos que eu claramente declara serem ignorados (gitignore criado após o commit inicial). Muito obrigado!
Potaito
1
Resolveu o meu problema. O Git estava rastreando a pasta do fornecedor no meu repositório laravel, embora eu tivesse adicionado a pasta do fornecedor no gitignore. Muito obrigado.
Jayant
44

Eu tive alguns problemas ao criar um arquivo no Windows Explorer com um .no início.

Uma solução alternativa era entrar no shell de comando e criar um novo arquivo usando "editar".

sf.
fonte
2
ou apenas adicione um extra .no final, para que o explorer pare de pensar que .gitignoreé a extensão. Em seguida, na entrada que arrastando ponto sem extensão só fica comido e você é deixado com .gitignore TL; DR: tentar nomeá-lo .gitignore.=> você acabar com.gitignore
leerssej
43

Para instruir o Git a ignorar determinados arquivos ou pastas, você precisa criar um .gitignorearquivo.

Mas no Windows Explorer você precisa fornecer um nome para o arquivo. Você simplesmente não pode criar um arquivo com apenas uma extensão. O truque é criar um arquivo de texto vazio e ir para o prompt de comando e alterar o nome do arquivo para .gitignore:

ren "New Text Document.txt" .gitignore

Agora abra o arquivo com o seu editor de texto favorito e adicione os nomes de arquivo / pasta que deseja ignorar. Você também pode usar curingas como este: *.txt.

Mahes
fonte
15
Ou apenas: echo dir_to_ignore /> .gitignore
Oliver
2
Ou type nul > .gitignorepara criar um arquivo vazio
Castro Roy
Ou apenas chamar o arquivo .gitignore.quando as extensões de arquivo não estão escondidos em seu Windows Explorer
Vairis
22

Se você deseja manter uma pasta e não os arquivos dentro dela, basta colocar um arquivo ".gitignore" na pasta com "*" como conteúdo. Este arquivo fará o Git ignorar todo o conteúdo do repositório. Mas .gitignoreserá incluído no seu repositório.

$ git add path/to/folder/.gitignore

Se você adicionar uma pasta vazia, você receberá esta mensagem (.gitignore é um arquivo oculto)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

Então, use "-f" para forçar a adição:

$ git add path/to/folder/.gitignore -f
sensorario
fonte
19

No Windows, há um problema extra com barras. Excluindo um único diretório no .gitignore com

dir_to_exclude /

possivelmente funcionará, mas excluindo todos os diretórios com

/

causa problemas quando você tem nomes de arquivos com espaços (como my file.txt) no diretório: Git Bash escapa esses espaços com uma barra invertida (como my\ file.txt) e o Git for Windows não faz distinção entre /e \.

Para excluir todos os diretórios, use melhor:

** /

Dois asteriscos consecutivos significam o conteúdo do diretório.

infeliz
fonte
15

Também no \.git\infodiretório de projetos, há um arquivo de exclusão que é efetivamente a mesma coisa que .gitignore(eu acho). Você pode adicionar arquivos e diretórios para ignorar isso.

Si3
fonte
Eu gosto dessa abordagem, simplesmente não consigo me dar bem com o caminho, quero ignorar uma pasta no repositório principal, como?
Shimmy Weitzhandler
Mas você não deve deixar os arquivos no .git sozinho (manipular o conteúdo por meios oficiais)?
Peter Mortensen
13

Caso precise excluir subpastas, você pode usar o **curinga para excluir qualquer nível de subdiretório.

**/build/output/Debug/
Comer no Joes
fonte
12

Para ignorar um diretório inteiro no Git, a maneira mais fácil é incluir um arquivo .gitignore no diretório de destino, que simplesmente contém "*".

Um exemplo ilustrativo,

Sistema de exemplo

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Objetivo

  • ignore o conteúdo de / dirB /

Nível superior .gitignore (/root/.gitignore)

  • É aqui que as informações padrão do gitignore vão

Diretório ignorado .gitignore (/root/dirB.gitignore)

  • Este arquivo é lido como '*' e o diretório é ignorado completamente, ele mesmo e todos os arquivos!

E é simples assim :)

J-Dizzle
fonte
10

Quando tudo mais falhar, tente editar o arquivo

/.git/info/exclude

e adicionando os diretórios que você deseja ao final do arquivo, assim:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

Eu adicionei as pastas "assets" e "compiled" à lista de arquivos e diretórios a serem ignorados.

Xedret
fonte
1
Estou usando o Atom no Windows 10. Está funcionando! Valeu cara!
precisa
Tentei todos os outros com minha configuração atual e essa foi a minha resposta definitiva.
Xedret 14/11/19
9

No Unix:

touch .gitignore

No Windows:

echo > .gitignore

Esses comandos executados em um terminal criarão um .gitignorearquivo no local atual.

Em seguida, basta adicionar informações a este .gitignorearquivo (usando o Notepad ++ por exemplo) quais arquivos ou pastas devem ser ignorados. Salve suas alterações. É isso aí :)

Mais informações: .gitignore

fvolodimir
fonte
9

Você pode criar o arquivo ".gitignore" com o conteúdo:

*
!.gitignore

Funciona para mim.

Claudionor Oliveira
fonte
2
Essa é a melhor resposta, além de trazer benefícios adicionais na implantação e manutenção do projeto.
Nitin ...
Quem é "simples" ?
Peter Mortensen
8

Eu tive alguns problemas com o Git para pegar o .gitignorearquivo no Windows. O $GIT_DIR/info/excludearquivo sempre parece funcionar.

A desvantagem dessa abordagem, no entanto, é que os arquivos no $GIT_DIRdiretório não são incluídos no check-in e, portanto, não são compartilhados.

ps $GIT_DIRé geralmente a pasta oculta chamada.git

Jason
fonte
Sim, o git no Windows é realmente meticuloso sobre .gitignore - o arquivo de exclusão local faz o que eu preciso. Obrigado!
28712 Andersop
6

Presumo que o problema é que sua árvore de trabalho é como:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... com o que .gitignorevocê descreve. Isso lhe dará uma git statussaída como:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... se os index.htmlarquivos ainda não foram adicionados ao repositório. (O Git vê que existem arquivos não-registrados nos diretórios de cache, mas apenas os reporta.) Para corrigir isso, verifique se você adicionou e confirmou os index.htmlarquivos:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... e sua git statusvontade se parecerá com:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(Obviamente, você também quer se comprometer .gitignore. Eu estava sendo preguiçoso neste caso de teste.)

Mark Longair
fonte
1
Você provavelmente não quer cometer .gitignore especialmente porque é provável que você deseja acompanhar as mudanças a ele, e assim é o seu time (se você estiver trabalhando com um). Veja stackoverflow.com/a/767213/123033
Dave Everitt
2
@ Dave Everitt: É exatamente por isso que eu disse: "Obviamente, você quer cometer .gitignore também".
precisa saber é o seguinte
6

No Windows e Mac, se você deseja ignorar uma pasta chamada Flower_Data_Folder no diretório atual, pode:

echo Flower_Data_Folder >> .gitignore

Se for um arquivo chamado data.txt:

echo data.txt >> .gitignore

Se for um caminho como "Data / passwords.txt"

echo "Data/passwords.txt" >> .gitignore. 
Olusola Omosola
fonte
2

Eu tive problemas semelhantes. Eu trabalho em uma cadeia de ferramentas do Windows com um repositório compartilhado com os funcionários do Linux, e eles criam arquivos com o mesmo nome (exceto no caso) em uma determinada pasta.

O efeito é que eu posso clonar o repositório e ter imediatamente dezenas de arquivos 'modificados' que, se eu fizessem check-in, causariam estragos.

Eu tenho o Windows definido para maiúsculas e minúsculas e o Git para não ignorar maiúsculas e minúsculas, mas ainda falha (nas chamadas da API do Win32 aparentemente).

Se eu fizer o gitignore dos arquivos, lembre-se de não acompanhar o arquivo .gitignore.

Mas eu encontrei uma boa resposta aqui:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html

Chris Aaaaa
fonte
O link parece estar quebrado (ele é redirecionado primeiro para a versão 'https'): "Falha na conexão segura. Ocorreu um erro durante uma conexão com archive.robwilkerson.org. PR_END_OF_FILE_ERROR"
Peter Mortensen
0

Basta criar um .gitignorearquivo na sua pasta do projeto. Em seguida, adicione o nome da pasta nela, por exemplo:

frontend/node_modules
DINA TAKLIT
fonte