NuGet and distributed version control (DVCS)

I wonder if it is possible to use nuget to only store references to the required packages in version control (only the package.config and ignore the packages folder).

Is there a way to tell nuget to (re)download all the referenced packages in the various package.config files? Or something similar which could be put into a build script.

Update:

Seems that I'm not the only one who requested this feature: See this work item (thanks to PHeiberg for the hint)

Update 2:

NuGet now has this feature builtin. See Using NuGet without committing packages to source control for details. All left is to add the packages directory to .gitignore or some equivalent of your VCS (/packages/ will do the trick if you have it in the root of your repository and are using git).


Solution 1:

I just found out about NuGetPowerTools: https://github.com/davidfowl/NuGetPowerTools

Also see: http://blog.davidebbo.com/2011/08/easy-way-to-set-up-nuget-to-restore.html

Update: NuGet 1.6 now supports Package Restore: http://docs.nuget.org/docs/release-notes/nuget-1.6

Solution 2:

I don't know about your first question.

As for having a CI server automatically update the packages, it's doable in theory. You could chain the "List-Package -Installed" and the "Update-Package" commands and have each package updated to the latest version. See the command reference for further details.

Scott Guthrie says this on the topic:

"You can integrate the command-line option with a CI solution and do an update-package command explicitly as part of your build/CI process to pull down updates. Frankly I'm not sure that makes sense for the scenarios we are talking about, though, as typically you want some dev to decide before updating a core runtime dependency to a new version. NuPack's default model would have a developer use NuPack to install a library - and NuPack would automatically check in the package and dependencies to source control. That way another dev (or the CI server) wouldn't need to use NuPack again - they could just sync their source and build. But as I mentioned earlier - if you wanted to explicitly do an update as part of your CI process you could."

Edit:

After your comment I see what you're trying to achieve. I found this long thread in the NuPack discussions list about the issue. A solution will apparently not be part of v1. A custom build task in the CI of your choice and a config in your repo for it is the only solution I see. Please report back with your findings. You got me interested.

Solution 3:

There is a current discussion about this question at Phil Haack's blog, where he is asking for feedback on how to tackle this question.