Quando você usaria .git / info / exclude em vez de .gitignore para excluir arquivos?

143

Estou um pouco confuso sobre os prós e os contras do uso .git/info/excludee .gitignoreexclusão de arquivos.

Ambos estão no nível do repositório / projeto, então como eles diferem e quando devemos usar .git/info/exclude?

Parag
fonte

Respostas:

195

A vantagem .gitignoreé que ele pode ser verificado no próprio repositório, ao contrário .git/info/exclude. Outra vantagem é que você pode ter vários .gitignorearquivos, um dentro de cada diretório / subdiretório para regras de ignição específicas do diretório, ao contrário .git/info/exclude.

Portanto, .gitignoreestá disponível em todos os clones do repositório. Portanto, em grandes equipes de todas as pessoas estão ignorando o mesmo tipo de arquivos de exemplo *.db, *.log. E você pode ter regras de ignição mais específicas por causa de várias .gitignore.

.git/info/excludeestá disponível apenas para clones individuais, portanto, o que uma pessoa ignora em seu clone não está disponível no clone de outra pessoa. Por exemplo, se alguém usa Eclipsepara desenvolvimento, pode fazer sentido para o desenvolvedor adicionar .buildpasta, .git/info/excludeporque outros desenvolvedores podem não estar usando o Eclipse.

Em geral, as regras de arquivos / ignorar que devem ser universalmente ignoradas devem entrar .gitignoree, caso contrário, os arquivos que você deseja ignorar apenas no seu clone local devem entrar.git/info/exclude

mu 無
fonte
mas isso deve idealmente entrar em ~ / .gitignore conforme a documentação oficial do Git aqui, git-scm.com/docs/gitignore
Devendra Swami
@DevendraSwami Não entendi qual entrada específica deveria entrar ~/.gitignoreno seu comentário acima. Meu entendimento é que as regras de ignorar podem estar em três níveis - $PROJECT/.git/info/excludepara regras de ignorar específicas do (projeto, usuário), $PROJECT/<any number of directories>/.gitignoreque são para regras de ignoradas específicas do projeto em qualquer usuário em qualquer lugar (quando check-in), ~/.gitignore para regras de ignoradas específicas do usuário para qualquer projeto desse usuário nessa máquina. Com base no objetivo, você escolhe o local para entrar.
mu 無
Sim, você está absolutamente certo. Meu comentário foi relacionado a esta questão stackoverflow.com/questions/59673991/…
Devendra Swami
Peço desculpas pelo comentário incompleto original.
Devendra Swami
2
@ShimmyWeitzhandler, o arquivo sln já está em seu repositório? Em seguida, excluir ou .ignore não impedirá que o git rastreie suas alterações. Tente um dos seguintes procedimentos: git rm --cached <path-name>o excluirá do repositório, mas o manterá localmente. git update-index --skip-worktree <path-name>ignorará as alterações no arquivo, mas o manterá no repositório. Por curiosidade: Por que você deseja que o arquivo sln seja excluído? É uma parte importante de uma solução .Net, certo?
Koen
36

Pesquisado: três maneiras de excluir arquivos

  1. .gitignore aplica-se a todos os clones deste repositório (com versão, todos o terão),
  2. .git/info/exclude aplica-se apenas à sua cópia local deste repositório (local, não compartilhada com outras pessoas),
  3. ~/.gitignore aplica-se a todos os repositórios no seu computador (local, não compartilhado com outras pessoas).

3. requer realmente definir uma configuração no seu computador:

git config --global core.excludesfile '~/.gitignore'
LeGEC
fonte
2
Sim, eu li isso também, mas queria para obter uma perspectiva mais prática (mundo real) :-)
Parag
O blog vinculado chama o arquivo por engano .git/info/excludes, quando deveria .git/info/exclude, conforme confirmado pela documentação à qual ele vincula.
mwfearnley
13
(Spoiler: a terceira via é o computador global ignorar através de uma configuração em ~ / .gitconfig)
lamenta hmijail resignees
@hmijail: obrigado, eu incluí o seu comentário nesta resposta
LeGEC 11/11/19
12

Apenas para oferecer nossa experiência (no mundo real): começamos a usar .git / info / exclude quando tínhamos que personalizar alguns arquivos de configuração em cada ambiente de desenvolvimento, mas ainda assim desejávamos que a fonte fosse mantida no repositório e disponível para outros desenvolvedores.

Dessa forma, os arquivos locais, uma vez clonados e modificados, podem ser excluídos das confirmações sem afetar os arquivos originais no repositório, mas também não necessariamente são ignorados no repositório.

Effing
fonte
4

Use .gitignorepara ignorar regras específicas do projeto . Use excludeou um arquivo de ignição global para ignorar regras específicas ao seu ambiente .

Por exemplo, meus arquivos de ignorância global ignoram os arquivos temporários gerados por qualquer editor que eu esteja usando - essa regra é específica para o meu ambiente e pode ser diferente para outro desenvolvedor no mesmo projeto (talvez eles usem um editor diferente). OTOH, meus .gitignorearquivos de projeto ignoram coisas como chaves de API e constroem artefatos - são para o projeto e devem ser os mesmos para todos no projeto.

Isso ajuda?

Marnen Laibow-Koser
fonte