如何在团队开发中正确使用NuGet?

时间:2011-12-09 02:06:08

标签: version-control nuget

所以我想使用NuGet来管理我用于我的团队和我正在进行的特定项目的各种项目。到目前为止,我已将我的.js库文件放在我的Web解决方案(ASP.NET MVC 2)的/ Scripts目录中并引用了这些文件。当然,这是手动的,在升级等过程中管理很烦人。

现在我正在使用NuGet,我意识到NuGet的整个目标是让它变得相当轻松。此外,似乎我不应该将我的包检查到我的存储库(AKA我不再需要管理我的外部库)。但是,当我从NuGet中获取jQuery(例如)时,它会将其特定文件放在我项目的/ Scripts目录中。

我感到困惑的地方 - 如果有的话,我应该在此时查看源代码管理?我还要检查/ Scripts目录吗?

此外,如果其他人正在处理此项目并从源代码管理中检出解决方案,是否会自动下载软件包(假设解决方案附带有效的packages.config)?

在我们开始全职使用NuGet之前,我只想澄清几点。

2 个答案:

答案 0 :(得分:13)

NuGet与VCS有两种情况:办理登机手续或不办理登机手续,这就是问题所在。 两者在我看来都是有效的,但是当使用TFS作为VCS时,我肯定会选择no-checkin policy for NuGet packages

话虽如此,即使对NuGet包使用no-checkin策略,我仍然会检查这些NuGet包对我的项目所做的内容更改。 \Scripts文件夹将完整地签入(不是选择性的,不会被忽略)。

我的包裹的禁止签入政策意味着:不检查\ Packages文件夹(cloak it,忽略它),\Packages\repositories.config文件除外。

因此,你实际上没有提交任何NuGet包,并且在使用NuGetPowerTools中的Enable-PackageRestore时(这将在NuGet v1.6中内置),任何检查出来的机器代码和构建,将在预构建步骤中获取所有必需的NuGet依赖项。 对于本地开发机器和构建服务器都是如此,只要在解决方案中启用Enable-PackageRestore并指向正确的NuGet存储库(本地,内部,外部)。

如果你考虑一下,当安装一个只添加对某些二进制文件的引用的NuGet包时,你已经在no-checkin场景中做了同样的事情:你不会提交\Packages文件夹的子文件夹,但是,您仍然会提交项目更改(添加的参考)。

我会说,保持一致(对于任何类型的包),无论是仅包含二进制文件,仅包含内容还是混合。 Do not commit the packages themselves,确实将更改提交到您的来源。 (如果只是为了避免查找改变内容的麻烦)

答案 1 :(得分:1)

NuGet一样,

Nexus是工件库(工件是任何类型的可交付物,包括可能很大的二进制文件)。

副作用是您不能存储在以下的VCS(版本控制系统)元素中:

  • 不会受益于VCS功能(分支,合并)
  • 会显着增加VCS存储库的大小(没有增量或弱增量存储)
  • 很难从VCS存储库中删除(主要是为保留历史记录)

目标是为了声明你需要的东西(让NuGet为你取得)而不是自己存储
因此,您可以将/Scripts版本作为占位符,但您现在不再需要对其中的任何内容进行自动获取。