O que é .gitignore exatamente?

212

Acabei de criar um repositório do Github e queria saber para que serve o .gitignorearquivo. Comecei por não criar um, mas adicionei um devido ao fato de a maioria dos repositórios ter um. Preciso ter um? Posso simplesmente ignorá-lo ou tem algum uso? Eu fiz algumas pesquisas sobre o assunto, mas não consegui encontrar uma explicação concreta.

Zahachos
fonte

Respostas:

175

.gitignoreinforma ao git quais arquivos (ou padrões) ele deve ignorar. Geralmente é usado para evitar a confirmação de arquivos transitórios do diretório de trabalho que não são úteis para outros colaboradores, como produtos de compilação, arquivos temporários criados por IDEs etc.

Você pode encontrar todos os detalhes aqui .

Mureinik
fonte
Portanto, se você criar um .gitignore em um novo repositório no github.com, faça o git init e o git add . no seu computador local - ainda não conectado ao .gitignore, pois ainda não está conectado a esse repositório - como isso funciona? Isso entra em vigor quando eu executo um commit git? Ou?
Xonatron
para que é _._gitignoreusado? é usado apenas quando o gitignore está em uma sub Dir.?
Saikat Chakrabortty
Portanto, ele permanece localmente, mas não é empurrado para a origem? Portanto, se algum usuário baixa o repositório do github, esse arquivo secreto também é baixado?
Conheça Zaveri
O que significa ignorar ? Quem / o que / quando o ignora? Eu sei o que a palavra ignorar significa, mas não encontro uma descrição clara do que ignorar significa no contexto do Git. Obviamente, o termo é totalmente compreensível por pessoas que o entendem, mas qualquer coisa escrita para definir algo para pessoas que ainda não o conhecem precisa explicar todos os termos que possuem definições exclusivas para o contexto.
user34660
1
@ user34660 Ignorar significa exatamente isso - o Git não rastreará alterações nos arquivos especificados por (os padrões) no .gitignorearquivo. Mesmo se você alterá-los, o git não os mostrará como modificados.
Mureinik
42

É uma lista de arquivos que você deseja que o git ignore em seu diretório de trabalho.

Digamos que você esteja em um Mac e tenha arquivos .DS_Store em todos os seus diretórios. Você quer que o git os ignore e adiciona .DS_Store como uma linha no .gitignore. E assim por diante.

Os documentos do git informarão tudo o que você precisa saber: http://git-scm.com/docs/gitignore

Andy Lester
fonte
2
Seu .DS_Storecenário finalmente ressoou comigo, pois acho que não estava me apegando a esse conceito porque ainda não precisava usá-lo em um projeto. Obrigado. Acabei usando isso como ponto de partida, pois utilizava todos os diferentes sistemas operacionais, observando especificamente a # OS generated files #seção.
Phoenixlaef
2
Eu sei que estou atrasado para esta discussão, mas obrigado @AndyLester! Eu sou um novato quando se trata de programação e Github. Acho que muitas das respostas escritas para abordar esse tipo de pergunta estão cheias de termos que o iniciante pode não entender (por exemplo, produtos de compilação, arquivos temporários que os IDEs criam ... o que diabos são essas coisas!). No entanto, a descrição do seu Mac é perfeita em sua simplicidade elegante!
Vesuccio 21/03
21

Quando você está realizando uma consolidação, não deseja incluir acidentalmente arquivos temporários ou criar pastas específicas. Portanto, use uma .gitignorelista de itens que você deseja ignorar ao confirmar.

Além disso, o mais importante git status é um dos comandos mais usados ​​em que você deseja git statuslistar os arquivos que foram modificados.

Você gostaria que sua git statuslista aparecesse limpa de arquivos indesejados. Por exemplo, eu mudei a.cpp, b.cpp, c.cpp, d.cpp & e.cppe quero que eu git statusliste o seguinte:

git status
a.cpp
b.cpp
c.cpp
d.cpp
e.cpp

Eu não querogit status listar arquivos alterados como este com os arquivos e arquivos intermediários de objetos da pasta de compilação

git status
a.cpp
b.cpp
c.cpp
d.cpp
e.cpp
.DS_Store
/build/program.o
/build/program.cmake

Portanto, para me libertar da git statuslista desses arquivos temporários intermediários e acidentalmente enviá-los para o repositório, devo criar um .gitignoreque todo mundo faça. Tudo o que preciso fazer é listar os arquivos e pastas .gitignoreque desejo excluir da confirmação.

A seguir, é minha .gitignorepara evitar cometer arquivos desnecessários

/*.cmake
/*.DS_Store
/.user
/build
programmer_of_the_galaxies
fonte
7

Existem arquivos nos quais você não deseja que o Git faça check-in. O Git vê todos os arquivos em sua cópia de trabalho como uma das três coisas:

  1. rastreado - um arquivo que foi previamente preparado ou confirmado;
  2. não rastreado - um arquivo que não foi preparado ou confirmado; ou
  3. ignorado - um arquivo que foi dito explicitamente ao Git para ignorar.

Arquivos ignorados geralmente são artefatos criados e arquivos gerados por máquina que podem ser derivados da origem do repositório ou, caso contrário, não devem ser confirmados. Alguns exemplos comuns são:

  • caches de dependência, como o conteúdo /node_modulesou/packages
  • código compilado, tais como .o, .pyce .classarquivos
  • diretórios de saída de construção, tais como /bin, /outou/target
  • arquivos gerados em tempo de execução, tais como .log, .lockou.tmp
  • arquivos de sistema ocultos, como .DS_StoreouThumbs.db
  • arquivos de configuração IDE pessoais, como .idea/workspace.xml

Os arquivos ignorados são rastreados em um arquivo especial chamado .gitignorecheck-in na raiz do seu repositório. Não há um comando explícito git ignore: em vez disso, o .gitignorearquivo deve ser editado e confirmado manualmente quando você tiver novos arquivos que deseja ignorar. .gitignoreOs arquivos contêm padrões que são comparados com os nomes de arquivo no seu repositório para determinar se devem ou não ser ignorados. Aqui está um arquivo de amostra.gitignore . Para mais detalhes veja este link

imk
fonte
5

O principal objetivo do .gitignore - para evitar a adição de arquivos irrelevantes, etc.

Eu tenho muitas anotações / rabiscos pessoais em determinados repositórios: eles são úteis para mim, mas não para mais ninguém. Eu não gostaria que ele fosse carregado no github porque simplesmente confundiria todos que o lessem. O bom é que posso pedir ao git para "ignorar" esses arquivos. O único custo dessa abordagem é que não poderei recuperar essas anotações se meu computador travar, etc.

BKSpurgeon
fonte