[version-control] NuGet의 패키지를 버전 제어에 체크인 하시겠습니까?

NuGet 이전에는 프로젝트에서 사용되는 모든 외부 DLL을 체크인하는 것이 일반적으로 허용되는 ‘모범 사례’였습니다. 일반적으로 Libs또는 3rdParty디렉토리에 있습니다.

NuGet으로 작업 할 때 packages디렉터리 를 체크인해야합니까 , 아니면 MSBuild가 nuget 피드에서 필요한 패키지를 자동으로 다운로드 할 수있는 방법이 있습니까?



답변

아니

이 질문이 제기되었으므로 이제 패키지를 소스 제어에 커밋하지 않고도 NuGet을 사용할 수있는 쉬운 워크 플로가 있습니다.

패키지 관리자 콘솔에서 ‘NuGetPowerTools’ 를 설치해야합니다 .

Install-Package NuGetPowerTools

그런 다음 프로젝트에서 팩 복원을 지원하도록하려면 다른 명령을 실행해야합니다.

Enable-PackageRestore

이제 패키지 폴더없이 코드베이스를 커밋 할 준비가되었습니다. 이전 명령은 패키지가 누락 된 경우 자동으로 다운로드되고 추가되도록 프로젝트 파일을 변경했습니다.

출처

패키지를 소스 제어에 커밋하지 않고 NuGet 사용


답변

예. 질문에서 언급 한 “libs”디렉토리와 동일한 “packages”디렉토리를 고려하십시오. 이것이 제가 OSS 프로젝트에서 개인적으로 취하는 접근 방식입니다.

MSBuild가 필요한 패키지를 자동으로 다운로드 할 수 있도록하는 기능을 조사 중이지만 아직 구현되지 않았습니다 (NuGet 1.1 기준).

일부 사람들은 이미 이러한 기능을 자체적으로 구현했을 수 있지만, 우리의 계획은 NuGet 1.2 또는 1.3에 해당 기능을 내장하는 것입니다.


답변

여기에있는 모든 대답에도 불구하고 “어떤 종류의”버전 제어하에 모든 종속성을 갖지 않는 것은 여전히 ​​끔찍한 해결책입니다.

GIT의 경우 이는 GIT-LFS를 의미합니다.

NPM의 최근 에피소드는 왜 당신이 의존하는 인터넷 저장소가 고장 나거나 사용할 수 없는지 등을 보여줍니다.

더 이상 물건을 만들 수 없으므로 전달할 수 없습니다.


답변

질문을 한 후, 나는 toplovel Packages 디렉토리 를 확인할 필요가 없도록 다음과 같은 접근 방식을 적용했습니다 .

최상위 build.msbuild 파일에서 :

<Target Name="NuGet">
    <ItemGroup>
       <NuGetPackage Include="*\packages.config" />
    </ItemGroup>
    <Exec Command='libs\NuGet.exe install "%(NuGetPackage.FullPath)" -o Packages'  />

    <!-- optional for project that has JavaScript content -->
    <CreateItem Include="Packages\*\Content\Scripts\*">
       <Output TaskParameter="Include" ItemName="NuGetJSFiles"/>
    </CreateItem>
    <Copy SourceFiles="@(NuGetJSFiles)" DestinationFolder="MainProj\Scripts\" OverwriteReadOnlyFiles="true" SkipUnchngedFiles="true" />
    <Delete Files="MainProj\Scripts\.gitignore" />
    <WriteLinesToFile File="MainProj\Scripts\.gitignore" Lines="%(NuGetJSFiles.Filename)%(NuGetJSFiles.Extension)" /
    <Delete Files="@(PostNuGetFiles)" />
</Target>

각 project.csproj 파일에서

<Target Name="BeforeBuild">
    <Error Condition="!Exists('..\Packages\')" Text="You must run &gt; msbuild build.msbuild to download required NuGet
Packages" />

    <!-- optional for project that has JavaScript content -->
   <ReadLinesFromFile File="Scripts\.gitignore">
     <Output TaskParameter="Lines" ItemName="ReqJSFiles" />
   </ReadLinesFromFile>
   <Message Text="@(ReqJSFiles)" />
   <Error Condition="!Exists('Scripts\%(ReqJSFiles.Identity)')" Text="You must run &gt; msbuild build.msbuild to download required NuGet JS Package - Scripts\%(ReqJSFiles.Identity)" />
 </Target>


답변

이 질문이 처음 게시되고 답변되었을 때 현실이 달랐다는 것을 알고 있었지만 다행히 답변이 약간 변경되었습니다. 이제 NuGet을 사용하여 Pre-Build 이벤트를 사용하여 MSBuild를 통해 종속성을 다운로드 할 수 있습니다. 코드 저장소에 패키지 폴더를 넣을 필요가 없으며 모든 종속성은 빌드시 다운로드 및 / 또는 업데이트됩니다. 해결 방법 일 수 있지만 충분히 괜찮아 보입니다. 자세한 내용은 다음 블로그 게시물을 참조하십시오. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html


답변

2013 년 9 월 20 일부로 “Nuget Restore”라는 것이 있습니다. 원할 경우 실제로 패키지 폴더를 체크인 할 필요가 없습니다. (특히 DVCS를 사용하는 경우)

이것을 확인하십시오 : 패키지를 소스 제어에 커밋하지 않고 NuGet 사용
http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages


답변

이 게시물은 매우 오래되었습니다. 대답은 여전히 ​​아니오이지만 솔루션이 변경되었습니다. NuGet 2.7 이상부터는 소스에 NuGet.exe 파일을 포함하지 않고도 자동 패키지 복원을 활성화 할 수 있으며 (최소한 말하지 않는 것은 바람직하지 않음) 최신 DVCS를 사용하는 경우 패키지 폴더를 무시할 수 있습니다. 특별한 사용자 지정이 필요한 경우 솔루션 루트에 nuget.config 파일을 만들 수 있습니다.

http://docs.nuget.org/docs/reference/package-restore

또한 새로운 csproj 형식을 사용하면 지금 통합되어 있으므로 추가 nuget.config 파일도 피할 수 있습니다. 더 잘 설명하는이 게시물을 확인하십시오.

.nuget 폴더를 버전 관리에 추가해야합니까?