패키지 폴더를 무시하도록 TFS 받기


332

packages폴더 를 무시하기 위해 TFS (2013)를 가져 오려고 합니다. 열정적으로 NuGet을 사용하면서 소스 제어를 원하지 않으며 훌륭합니다!

클로킹을 시도했지만 (작동하지 않는 것 같습니다) .tfignore파일을 추가하려고 시도했지만 아무것도 무시되지 않습니다. 왜 TFS 팀은 많은 Subversion 클라이언트처럼 폴더 나 파일을 영구적으로 무시하는 옵션을 추가하지 않습니까?


어떤 버전의 TFS 및 Visual Studio를 사용하고 있습니까? 로컬 또는 서버 작업 공간을 사용하고 있습니까?
James Reed



1
이 질문에 대한 답을 바꿔야합니다
Chris Marisic

3
NuGet을 사용하는 경우 패키지 폴더가 필요합니다. 빌드시 누락 된 바이너리를 복원하도록 NuGet을 설정할 수 있습니다 (패키지 폴더를 소스 제어하지만 바이너리는 무시하도록). -그러나 문제가 있습니다 : NuGet 바이너리가 (버전 번호를 변경하지 않고) 업데이트되거나 제거 될 수 있습니다.-모든 종류의 이상한 이상한 일이 발생할 수 있습니다. 빌드를 우연히 방치하지 마십시오. 전체 패키지 폴더를 확인하십시오. 두통을 많이 피할 수 있습니다.
BrainSlugs83

답변:


497

NuGet은 절대로하지 말아야 할 소스 제어 관련 작업 (잘못된 형식, Microsoft!)을 수행하려고하므로 패키지를 무시하도록 NuGet TFS 에 알려야합니다 . 따라서 두 가지를해야합니다.

먼저 .tfignore솔루션 폴더에 이름이 지정된 파일을 추가하십시오 ( s뒤에는 없음 tf). 내용은 다음과 같아야합니다.

\packages

이는 TFS가 패키지 폴더를 무시하도록 지시합니다. 이제 파일 도 무시할 것이라고 생각할 것 입니다 repositories.config. 그러나 그렇지 않습니다. 왜? Microsoft의 길은 이상하고 신비합니다. 실제로, 나는 그것이 아래에 요약 된 NuGet 물건의 일부라고 생각하지만, 앞으로 수정 될 것이고 repositories.configVS를 재생성하지 않고 파일 을 유지 하려면 다음을 사용할 수 있어야합니다.

\packages
!\packages\repositories.config

이제 .tfignore파일 덕분에 TFS가 패키지를 무시합니다. 다 괜찮아요? NuGet은 소스 컨트롤을 사용하고 보류중인 변경 사항에 패키지를 추가하기 때문에 잘못되었습니다 . 이제 NuGet에게 이미 잘라내라고 알려 드리겠습니다.

.nuget솔루션 폴더의 루트에 폴더를 작성하십시오 . 1 이제라는 파일을 만들어이 NuGet.config새 폴더에 넣습니다 2 . 내용은 다음과 같아야합니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

그리고 지금 당신의 패키지는 소스 제어 밖으로 유지해야한다. 소스 제어에 NuGet.config.tfignore파일 을 추가하여 손실되지 않도록하십시오.

편집 : 문제가있는 경우 패키지 폴더를 삭제하고 변경 사항을 확인한 다음 위의 단계를 수행하십시오.

또한 편집 : 새로운 버전의 Nuget에서는 발생하지 않는 것 같습니다. 따라서 VS / TFS 2017로 전환하면 위의 농구대를 뛰어 넘지 않고이 문제가 해결됩니다.

1 . 소스 제어 탐색기를 사용하여 폴더를 추가하십시오. 솔루션-> 폴더 추가-> .nuget 2를 마우스 오른쪽 단추로 클릭하십시오 . VS 2013을 사용하여 이것을 알아 냈을 때 NuGet.config가 .nuget 폴더로 이동해야한다는 것을 알았습니다. 솔루션 폴더의 루트에 NuGet.config 파일이 이미있는 경우에도 (예 : 회사에 내부 Nuget 피드가 있기 때문에) 그러나 의견 중 일부는 VS 2015의 솔루션 루트에서 제대로 작동한다고 표시했습니다. 개인적으로 git 모드에서 TFS를 사용하도록 전환했기 때문에 테스트 할 수 없습니다. 또한 사용자 정의 피드가있는 경우 Nuget.config 파일에 사용자 정의 피드와 nuget.org가 키로 있는지 확인하십시오. 그렇지 않으면 TFS가 임의로 패키지를 복원 할 수 없다고 결정하는 경우도 있습니다.


1
나는 이것이 적어도 TFS 2012를 요구한다고 믿는다. stackoverflow.com/questions/14365929/…
ClearCloud8

2
@zespri 어떤 파일이 삭제 대기 중입니까? NuGet 패키지? 삭제 대기 중이 아니어야합니다. 삭제해야합니다! 위에서 제안한 작업을 수행 한 후 팀 탐색기로 이동하여 이미 소스 제어에있을 수있는 모든 Nuget 패키지를 삭제하십시오. 또는 packages 폴더를 모두 삭제하십시오. 나는 몇 달 동안이 설정을 사용하여 그 오류를 경험하지 않았습니다.
Pharylon

5
VS2015의 경우 nuget.config가 /.nuget/ 안에있을 필요는 없습니다 . 솔루션 루트에서 훌륭하게 작동합니다.
jnm2

141
마침표로 시작하는 폴더와 파일을 만드는 방법이 궁금하다면 다른 마침표로 이름을 끝내십시오. .tfignore입니다. 그리고 .nuget.
Derek Ziemba

16
@DerekZiemba 깔끔한 트릭! 나는 몇 년 동안 커맨드 라인을 통해 그것을 해왔다. 나는 당신이 그렇게 할 때 후미 '.'라고 언급 할 가치가 있다고 생각합니다. 제거 될 것입니다. 처음에 귀하의 제안은 추가 '.' 끝에서.

53

위의 대안은 다음과 같습니다.

  • TFS에 패키지 폴더 추가 (파일 또는 하위 폴더 없음)
  • 패키지 폴더를 마우스 오른쪽 버튼으로 클릭하십시오
  • 왼쪽 클릭 고급
  • 망토를 클릭

이 솔루션은 TFS 작업 공간마다 적용되어야합니다. .tfignore파일을 사용하는 것보다 훨씬 안정적으로 작동했습니다 .

TFS가 설치된 NuGet 패키지를 소스 제어에 추가하지 못하게하는 블로그 기사에서이 방법에 대한 자세한 내용을 읽을 수 있습니다 .


23

.tfignore 옵션이 nuget.config 설정에서 작동하지 않는다고보고하는 사람들에게는 관심이있을 수 있습니다.이 단계는 마침내 저에게 효과적이었습니다.

  1. 내 패키지 폴더에서 모든 것을 삭제하십시오
  2. 보류중인 폴더 주위에서 TFS에 변경 사항이 없는지 확인하십시오.
  3. VS 닫기
  4. VS를 다시 열고 솔루션을 다시로드하십시오-Nuget 복원을 사용하여 패키지를 다시 채우십시오. TFS 소스 제어에 대한 변경 사항이 보류되지 않습니다.

3
이것은 패키지를 복원 한 후에 수행 한 Pharylon의 솔루션을 적용한 후에 저에게 효과적이었습니다.
user849924

1
정말 도움이 되겠지만, 최초 시간 (.tfignore 파일을 TFS에 커밋)에 대해이 작업을 수행해야합니다. 내가 맞다면
RajeshKdev

이 방법은 망토를 만드는 기계에서만 작동한다고 생각합니다. 내가 맞아? 모든 팀원의 근본 문제를 해결하지는 못합니다.
panox

이것의 변형은 저에게 효과적이었습니다. 패키지의 아무것도 커밋되지 않았 음을 확인한 다음 디스크에서 패키지 디렉토리를 삭제했습니다. 이 시점에서 여전히 VS 팀 탐색기에서 보류중인 변경 사항으로 표시되었으므로 패키지 디렉토리에서 보류중인 변경 사항을 실행 취소하도록 선택했습니다. 이것은 그것을 정리하고 (닫거나 다시 열 필요없이) 다시 돌아 오지 않습니다 =)
frax

8

솔루션의 .nuget 폴더에 nuget.config 파일을 추가하십시오. nuget.config 파일에 다음을 추가하십시오.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

disableSourceControlIntegration은 TFS 버전 제어를위한 비결입니다.


아무런 영향도 미치지 않습니다. 또한 글로벌 솔루션도 아닙니다.
Jaster

@So Many Goblins : 완전히 새로운 프로젝트 / sln에서 시도해 보셨습니까? (확인하기 만하면) 설정에서 이것이 작동하지 않을 때 궁금한 점이 있습니다. 직접 할 때마다 작동하기 때문에 TFS / nuget 으로이 작업을 수행하는 것이 좋습니다. 또한 어떤 버전의 VS / TFS가 있습니까?
Terje Sandstrøm

Visual Studio 2013. 새로운 솔루션입니다. 각 패키지를 명시 적으로 무시하고 .tfignore를 추가 하여이 문제를 해결했습니다.
너무 많은 고블린

2
이것이 바로 "Enable NuGet Package Restore"가하는 일입니다. 솔루션을 닫았다가 다시 열어야합니다! NuGet.config 파일은 솔루션을 열 때만 읽습니다.
Heliac

이것은 Visual Studio 온라인 및 VS2013에서 나에게 효과적이지 않았습니다. 오른쪽 클릭 솔루션> NuGet 패키지 복원 활성화를 사용했습니다. 그러면 Nuget.config 파일이 솔루션 루트에 추가됩니다. .tfignore를 추가하십시오. 나는 일반적으로 텍스트 파일을 솔루션 루트에 추가하여 그것을 감지 한 다음 'detected add'를 클릭하여 제외하고 마우스 오른쪽 버튼을 클릭하여 무시합니다. 그런 다음 패키지를 포함하여 모든 항목을 확인한 다음 솔루션의 모든 패키지를 삭제하고이 변경 사항을 확인하십시오 (TFS에서 패키지가 제거됨). 솔루션을 열고 빌드 할 패키지를 추가하지만 TFS는이를 선택하지 않습니다.
David Wilton

7

작업 .tfignore하려면 로컬 작업 공간을 사용해야합니다 . .tfignore파일은 무시 할 파일이나 폴더가 포함 된 폴더에 있어야합니다.

솔루션 구조가 다음과 같다면 :

\Project
   \Packages
   \OtherStuff
   foo.cs

.tfignore 파일을 \ Project에 넣습니다.

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore

귀하의 경우에 .tfignore의 내용은 다음과 같습니다.

\packages

다음은 몇 가지 설명서입니다. http://msdn.microsoft.com/library/vstudio/ms245454(v=vs.110).aspx#tfignore


2
.tfignore 파일을 추가했으며 프로젝트를 빌드 할 때 여전히 tfs에 패키지를 추가하려고합니다. 그것을 막기 위해 할 수있는 일은 거의 없습니다.
매트

추가 한 무시 파일을 게시 할 수 있습니까?
MrHinsh-Martin Hinshelwood

2
docs.nuget.org/docs/reference/package-restore-with-team-build를 참조하십시오. 이는 .tfignore 의 NuGet 버그이지만 NuGet에 SCM 통합을 위해 지시하도록 수정하면됩니다.
user2864740

1
그것은 당신이 모범이 packages아닌 것 \packages같습니다. 그것은 상대적 이 아니라 대신 해야한다고 생각합니다 .
Martin

6

AppData\Roaming모든 솔루션 (이전 및 새 솔루션) 에서이 일회용을 영구적으로 설정할 수 있습니다 !

당신의에서 %AppData%\NuGet\NuGet.Config파일의 바로 앞에 다음을 추가 </configuration>XML 태그는 ...

<config>
  <add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
  <add key="disableSourceControlIntegration" value="true" />
</solution>

... 원하는 경로를 지정할 수 있습니다. 중요한 것은 TFS 작업 영역 외부에 배치하는 것입니다!

이제 다시는 걱정할 필요가 없습니다. 솔루션 폴더에는 더 이상 패키지가 포함되지 않습니다. 모든 솔루션은 기본적으로 사용자 정의 패키지 위치를 대신 사용합니다.

참고-이 작업은 사용자별로 이루어집니다.


1
좋고 간단하게 들립니다. 이 접근 방식을 사용하는 경우 팀 전체, 특히 빌드 서버의 로그인 / 설정에서이 설정을 시행해야합니까?
Chris F 캐롤

나는 그렇게 상상할 것이다. 이 WRT 빌드 서버를 테스트하지 않았습니다. 죄송합니다. 또한 lib 폴더에 대한 다른 폴더 경로가 문제를 일으킬 수 있다고 생각합니다 (정확하게 리콜하면 일부 NuGet 패키지에 lib 경로에 대한 하드 참조가 있다고 생각합니다).
Heliac

2

빌드시 솔루션을 복원하도록 설정하면 패키지 폴더 및 패키지 파일이 체크인되지만 패키지는 체크인되지 않습니다.


1
"빌드시 복원"을 설명하십시오.
user2864740

10
Visual Studio를 마우스 오른쪽 단추로 클릭 한 "NuGet 패키지 복원 사용"기능은 NuGet 2.7에서 더 이상 사용되지 않습니다. TFS 2013은 기본적으로 NuGet.targets 파일없이 NuGet 패키지 복원 및 proj 파일 수정을 지원합니다.
Daniel Mann

1

TFS와 함께 Git을 사용하는 경우 ".gitignore"파일을 추가해야합니다. "팀 프로젝트 | 설정 | 'add ignore file'"에서이를 수행 할 수 있습니다. 그런 다음 파일을 열고 Nuget 패키지의 내장 ignore 문을 주석 해제하십시오.

TFVC를 사용 중이고 로컬 작업 영역을 구성한 경우 Git 파일과 동일한 형식을 따르는 ".tfignore"파일을 사용할 수 있습니다. "패키지 /"가 필요하다고 생각합니다.


우리는 TFSVC이며 초기 게시물에서 이미 언급했듯이 .tfignore 파일이 작동하지 않습니다.
Jaster

내가 말했듯이 올바른 형식의 .tfignore를 사용해야합니다. 난 당신이 라운드 잘못된 방법을 슬래시 믿습니다
MrHinsh - 마틴 하인 셀 우드

Ed Thompson과 대화 한 후 @MrHinsh가 .tfignore 파일이 올바르게 작동하지 않습니다. 그러나 .gitignore는 않습니다.
DaveShaw

@Ed는 고칠 필요가 있습니다;)
MrHinsh-Martin Hinshelwood

1

이것은 Visual Studio 온라인 및 VS2013에서 나에게 효과적이지 않았습니다.

  • 솔루션> NuGet 패키지 복원 사용을 마우스 오른쪽 단추로 클릭하십시오. Nuget.config 파일이 솔루션에 추가됩니다.

여기에 이미지 설명을 입력하십시오

  • .tfignore를 추가하십시오. 나는 일반적으로 텍스트 파일을 솔루션 루트에 추가하여 그것을 감지 한 다음 'detected add'를 클릭하여 제외하고 마우스 오른쪽 버튼을 클릭하여 무시합니다.

여기에 이미지 설명을 입력하십시오

  • .tfignore에 패키지를 추가하고 repositories.config를 포함하도록 지시하십시오.

여기에 이미지 설명을 입력하십시오

다른 의견으로는이 시점에서 마일리지가 다를 수 있습니다. 이것이 제가하는 것입니다:

  • 패키지를 포함하여 모든 내용을 확인하십시오.

  • 솔루션의 모든 패키지를 삭제 한 후이 변경 사항을 체크인하십시오 (TFS에서 패키지가 제거됨).

  • 솔루션을 열고 빌드하면 프로젝트에 패키지가 추가되지만 TFS는 선택하지 않습니다.


2
첫째, Nuget 복원 사용은 더 이상 사용되지 않으며 나중에 해당 경로로 이동하면 VS 2015에는 없습니다. 둘째 : 패키지와 dll을 체크인하면 소스 컨트롤에 추가되어 솔루션에서 삭제하고 체크인하면 지점 끝에서 SC에서 제거되지 않습니다. –
Terje Sandstrøm

1
@ TerjeSandstrøm 포인트는 촬영하지만, 문제는 바로, 당신은 소스 제어에서 영구적으로 제거 파괴 TF 사용해야 할 것입니다 2013 예에 따라 다릅니다,하지만 난 TFS는 .tfignore 파일을 준수 갈 수있는 다른 방법을 찾을 수 없습니다
David Wilton

1

나를 위해 일한 해결책은 Nuget.Config에서 .tfignore 다음 설정을 모두 만드는 것입니다.

<configuration>
  ...
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>  
  ...
</configuration>

내 .tfignore에는 다음 줄이 포함되어 있습니다.

\packages

[Visual Studio 2015 업데이트 2를 사용하고 있습니다]

이것은 이상적이지 않으며 현재 github / nuget에서 공개 문제로 기록됩니다.

TFVC # 493에서 패키지를 더 쉽게 생략 할 수 있도록하십시오


0

Terje의 답변 은 항상 작동하지 않습니다. 때로는 잠시 동안 작동하지만 다시 한 번 더 많은 "추가"를 보류합니다.

이 문제를 영구적으로 해결하는 유일한 방법은 내 작업 영역에서 패키지 폴더를 클로킹하는 것입니다.

예를 들면 다음과 같습니다.

Type      Server                Local
============================================
Active    $/Work/Main           C:\Code\Main
Cloaked   $/Work/Main/Packages

매우 이상했다. 최신 Visual Studio 및 NuGet 버전에서이 문제가 발생합니까?
Terje Sandstrøm

예, TFS 2012 로컬 작업 영역에서 VS 2013.4 및 NuGet 2.8을 실행합니다.
DaveShaw

수십 개의 프로젝트와 오염에 대해 모든 패키지 폴더를 숨겨야합니다. 또한 팀의 모든 구성원은 모든 작업 공간에 대한 절차를 반복해야합니다
Jaster

망토는 좋은 대답이 아니며 위의 두 가지 대답은 효과가 있으며 의도적으로 설계된 것입니다. 환경에 다른 일이 있어야합니다.
MrHinsh-Martin Hinshelwood

@ MrHinsh-부서의 다양한 사람들이 이것을 보았고 그것은 깨졌습니다. Git에서는 괜찮아 보이지만 TFVC를 사용할 때 항상 그렇게합니다.
DaveShaw

0

나는 같은 문제가 있었다. /packages작동하지만 나를 위해하지 않았다. packages*.*일했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.