Ignorando diretórios nos repositórios Git no Windows


1106

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


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 .


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"

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 .


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".


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.


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

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.


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.


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/

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 :)


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.


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


9

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

*
!.gitignore

Funciona para mim.


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


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.)


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. 

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.