Devemos incluir a pasta Nuget PACKAGE no controle de versão?


68

Eu gostaria de saber

No projeto C # ou VB.NET, devemos incluir a pasta PACKAGE (pasta nugget package criada para a raiz do meu projeto que contém os arquivos nupkg e outro conteúdo) em nosso repositório de controle de origem (Git, por exemplo).


Absolutamente Sim , porque esses arquivos fazem parte do seu código e seu projeto não será criado sem eles.
Sharky

Fiz uma pergunta semelhante sobre SO há muito tempo. Você também pode olhar lá para respostas: stackoverflow.com/questions/1710027/... :)
cwap

Eu me pergunto por que ninguém no mundo do Maven pergunta "devemos incluir bibliotecas de terceiros no controle de versão". Encontre algum contra-argumento sólido para NÃO cometer libs, embora não seja muito convincente.
Hoàng Long

Respostas:


28

Muito tempo se passou, e o NuGet mudou, então aqui está uma nova resposta.

O NuGet não cria mais uma pasta de pacotes dentro da sua estrutura de origem. Em vez disso, existe um no diretório do usuário ( %HOME%\.nuget\packagespara ser específico) em que ele coloca todos os pacotes baixados e os projetos apenas os referenciam.

Portanto, a resposta simples hoje em dia é não, você não deveria. Se você está preocupado com os pacotes que precisam desaparecer, crie um espelho local do NuGet para fazer backup separadamente.


6
Estou no VS2015 (considere que o VS2017 foi lançado apenas 3 dias antes de você escrever esta resposta) e a pasta do pacote está presente na raiz da minha solução. Estou curioso sobre como e quando o NuGet mudou.
21330 Teejay

O NuGet mudou com a versão 3, que foi lançada fora da banda em algum momento durante o período VS2015.
Sebastian Redl

Acabei de verificar no meu computador de trabalho e pacotes são onde você mencionou. Mas no meu computador doméstico eles estão no diretório do projeto. Ambos estão no VS2015 (profissional @ trabalho, comunidade @ lar) e o lar é uma instalação muito recente ... Isso é estranho.
5303 Teejay

12
Acabei de instalar o VS 2017 na semana passada, criei um novo projeto ontem e há um diretório de pacotes no meu projeto.
Jeremy

2
O que você faz pelo CI? você faz o download de todos os pacotes de nuget de novo e de novo? (TBH: Eu, eu mesmo, sou muito claro o que minha opinião é)
Tomer W

50

Depende.

Confira a resposta de Bart van Ingen Schenau para determinar se é possível ignorar a packagespasta.

Basicamente: sim, o NuGet foi projetado para que você possa ignorar a packagespasta e o NuGet extrairá tudo da Internet, se estiver ausente.

Mas você deveria ignorá-lo? Eu digo: depende.
Na IMO, é uma questão de "podemos continuar trabalhando caso o repositório de pacotes não esteja disponível" (seja temporário ou permanentemente)

Para meus projetos pessoais de OSS, tenho a packagespasta ignorada em todos eles.
Quando o nuget.org estiver offline, esperarei e continuarei outro dia.

Mas é algo diferente no trabalho.
Certamente, você provavelmente ainda possui os pacotes localmente em alguma máquina, mas está economizando algum espaço que vale a pena quando suas compilações estão sendo interrompidas porque o servidor de compilação não pode acessar o nuget.org?

Decidimos que o espaço é barato e não queremos problemas, é por isso que estamos comprometendo a packagespasta com o controle de origem.


11
Com que frequência o nuget.org está indisponível?
Bartosz

4
Provavelmente não com muita frequência. Mas talvez eu devesse ter dito "inacessível" em vez de "offline". Alguns anos atrás, tivemos um incidente no trabalho em que uma escavadeira acidentalmente cortou o cabo da Internet em nosso prédio. Demorou mais de um dia para reparar. Se tivéssemos confiado no nuget.org, não poderíamos construir nossos projetos. (sim, eu sei, hoje em dia NuGet armazena os pacotes localmente ... mas não na época)
Christian Specht

Eu direi que os tempos de compilação são muito mais longos quando você não faz check-in na pasta packages, porque ela passa a maior parte do tempo recuperando pacotes durante a restauração do pacote.
AaronLS 12/09

29

A regra básica para o que entra em um repositório de controle de origem é que você armazene lá tudo relacionado a um projeto que você precisa para construir, testar, implantar e executar o projeto e que não pode ser gerado a partir de itens já presentes no repositório .

Em outras palavras, se você pode jogar fora a pasta PACKAGE e seu conteúdo sem afetar sua capacidade de continuar trabalhando no projeto (a compilação pode demorar mais, mas você não precisa procurar e instalar nada), a pasta pode ser deixado de fora do repositório com segurança.
Se a pasta contiver pacotes de terceiros que podem demorar muito para serem baixados ou ficarem indisponíveis, isso pode ser um motivo para adicioná-los ao seu repositório de qualquer maneira.


20
Eu acrescentaria que você deve manter uma versão de qualquer código de terceiros usado no projeto armazenado com segurança, caso o projeto seja removido, o site que o hospeda se foi etc. Um bom lugar para fazer isso é no seu repositório de controle de versão . Isso também oferece a oportunidade de reverter para uma versão anterior desse código, se necessário.
Bent
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.