repositório git ignorando todos os .dlls


88

O título diz tudo. Estou tentando adicionar meus pacotes NuGet ao repositório. Tudo, exceto os arquivos .dll, estão sendo detectados.

O arquivo gitignore não contém referências a * .dll. Os arquivos .dll não são reconhecidos quando localizados em qualquer lugar do repositório inteiro. info / exclude também está vazio.

Eu também clonei o repositório (sistema de arquivos para sistema de arquivos, ao contrário de remoto para sistema de arquivos) sem sorte. Esse problema também ocorre em dois computadores diferentes.

Eu poderia adicionar os arquivos .dll manualmente, mas eles devem ser rastreados. Por que eles não estão sendo rastreados?


26
O que quer git config --get core.excludesfiledizer?
Antony Hatchkins de

2
Além disso, geralmente não é uma boa ideia usar o git para rastrear arquivos binários, pois o git não pode calcular deltas entre as revisões de forma eficiente, então manter todas as versões será um desperdício de espaço. Se as dlls forem geradas instantaneamente, é melhor simplesmente ignorá-las no git. Se não estiverem - é melhor usar outro mecanismo de sincronização (por exemplo, rsync).
Antony Hatchkins de

Esses são os pacotes NuGet que estou tentando adicionar ao git. Não estou usando a funcionalidade "Restauração de pacote" do NuGet, então preciso fazer o check-in de toda a pasta de pacotes.
Paul Knopf

Respostas:


121

Você tem um ~/.gitignore_globalou ~/.gitignoreem seu diretório inicial que também possa listar esses padrões de arquivo?

Veja https://help.github.com/articles/ignoring-files


6
Visto que ele está trabalhando com arquivos dll, ele está na plataforma Windows, então ~ significa $ HOMEDRIVE $ HOMEPATH no Windows 7
Antony Hatchkins,

9
Este acabou sendo o problema. Eu não adicionei este arquivo ignorar global embora. Alguma razão para que simplesmente surgisse do nada? Agora que penso nisso, instalei recentemente o SourceTree (da Atlassian). Talvez seja o culpado?
Paul Knopf

6
Eu tive o mesmo problema, também instalei o SourceTree antes disso. Então eu acho que é um palpite justo que SourceTree adicionou o arquivo ignorar global, já que costumava funcionar no passado.
Andreas Krebs

8
Editar: OK, foi adicionado pelo link
Andreas Krebs

31
Tive de correr git check-ignorepara descobrir onde estava o arquivo. Encontre-o em ~ / Documents / gitignore_global.txt
Matt Canty,

97

Se você usar SourceTree e a configuração padrão, ele irá ignorar todas as DLLs por padrão ... Tools => Options => Git e "Editar Arquivo" ... adicione um "#" antes de .dll => "# .dll" .. . salvar e fechar.

Em seguida, para o Windows Explorer, na pasta de pacotes, abra um terminal GitBash e digite "git add." e deixe funcionar, de volta ao SourceTree, espere um segundo e todas as DLLs de pacote ausentes aparecerão para você confirmar e enviar.


13
Resposta correta para usuários do SourceTree;)
jmpcm

Sabia sobre uma lista global de ignorados, não consegui encontrar na GUI .. Obrigado!
Christoph

Ferramentas => Opções => Git / Mercurial Global Ignore List ... Se você não tiver uma, pode criar e apontar para ela lá.
KevinB

2
Local do arquivo: ~ / Documents / gitignore_global.txt
James McCormack de

Isso funcionou para a árvore de origem, mas como para o estúdio visual, os ignorantes não estavam no meu gitignore. Qualquer um que usei a árvore de código-fonte para esta tarefa
Demodave

11

Eu poderia adicionar os arquivos .dll manualmente, mas eles devem ser rastreados. Por que eles não estão sendo rastreados?

Não, eles não devem ser rastreados, a menos que você os tenha adicionado. Somente os arquivos que já foram adicionados e confirmados são rastreados; isso é o que significa "rastreado".

Tente adicionar manualmente um deles via git adde ele dirá por que os está ignorando e solicitará que você use git add -fpara adicionar o arquivo de qualquer maneira.


Eu fiz um "git add '/ packages'" e ele não detectou os .dlls. Em seguida, usei -f e ele o adicionou. Porém, encontrei o problema. "* .dll" estava em meu ignorar global. Nenhuma pista de onde veio esse ignorar global.
Paul Knopf

2

Você precisa dizer explicitamente ao git para rastrear quaisquer novos arquivos.

  1. Execute git add filenamepara adicionar o arquivo ao índice do git.

  2. Execute git commitpara confirmar as alterações em seu índice.

git status também deve mostrar a lista de arquivos e diretórios não rastreados.

Se você quiser listar todos os arquivos no repo que são ignorados pelo gitignore, você pode executar:

git ls-files . --ignored --exclude-standard --others

Se você quiser listar todos os arquivos não rastreados no repo:

git ls-files . --exclude-standard --others

2
Eu tive que "git add -f" para rastrear os arquivos que foram de fato ignorados. Acabou sendo uma entrada no arquivo ignorar global, que algum aplicativo colocou lá para mim sem saber.
Paul Knopf de

2

Eu enfrentei um problema semelhante. Não consigo adicionar o arquivo .dll do diretório do pacote ao meu git, então encontrei o arquivo gitignore_global.txt, pois o sourcetree adicionou automaticamente este arquivo como uma configuração global do git ignore. Eu removi * .dll do arquivo gitignore_global.txt e funciona bem para mim.

Localização do arquivo gitignore_global.txt conforme abaixo

C: \ Users \ XXXX \ Documents \ gitignore_global.txt ou você pode encontrá-lo em fonte TOOL => OPTION => guia GIT e descobrir a lista global de ignorados


1

No meu caso, não havia referências .dll no arquivo .gitignore e eu não tinha um arquivo global. No entanto, no subdiretório .git, encontrei um arquivo chamado ms-persist.xml. Fechei todas as instâncias do Visual Studio e, em seguida, adicionei meus .dlls ausentes manualmente a esse arquivo. Quando eu reabri o Visual Studio, os .dlls estavam aparecendo como precisando ser registrados. Eu os registrei e agora estou ótimo ...


0

Você tem um local global .gitignoreou outros .gitignorearquivos em subdiretórios - relativos à raiz do seu projeto.

Em sistemas Linux e MacOS, o git-ignore global é mais provável em sua casa ~/

~/.gitignore_global

No Windows, provavelmente está no diretório do usuário. Tanto o seu usuário local (que você pode descobrir digitando ECHO %USERPROFILE%ou whoamina linha de comando).

Se não estiver lá, então certamente a .gitconfigestá presente. Procure aqui a localização do gitignore (por exemplo, a Documentspasta do usuário ).

Editar : Use git config --list --show-originpara obter detalhes das configurações git de contribuição e seus locais de arquivo correspondentes.


0

Sei que esta pergunta é muito antiga, mas estou adicionando para outras pessoas que podem acessá-la no futuro. Você pode modificar seu arquivo global ignore conforme as respostas acima mencionadas, mas isso afetará TODOS os seus repositórios git. Se, em vez disso, você quiser uma abordagem mais granular, pode apenas excluir DLLs específicas ou pastas específicas em seu projeto individual .gitignores. Isso substitui todas as configurações de ignorar e força os arquivos a serem detectados e tratados pelo git. Acho que essa é uma abordagem melhor.

.gitignore (para o seu projeto específico)

# Custom ignores
!*.dll
# or
!My.specific.dll

# rest of .gitignore
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.