Nhận TFS để bỏ qua thư mục gói của tôi


332

Tôi đang cố gắng để TFS (2013) bỏ qua packagesthư mục của mình . Tôi thực sự không muốn nó được kiểm soát nguồn khi tôi đang sử dụng NuGet và thật tuyệt!

Tôi đã thử che giấu (dường như không hoạt động), tôi đã thử thêm .tfignoretệp - không có gì bị bỏ qua. Tại sao nhóm TFS không chỉ thêm một tùy chọn để bỏ qua vĩnh viễn một thư mục hoặc tệp như nhiều khách hàng Subversion làm gì?!


Phiên bản nào của TFS và Visual studio bạn đang sử dụng? Bạn đang sử dụng không gian làm việc cục bộ hoặc máy chủ?
James Reed



1
Bạn nên thay đổi câu trả lời cho câu hỏi này
Chris Marisic

3
Nếu bạn đang sử dụng NuGet, thư mục gói là bắt buộc. Mặc dù vậy, bạn có thể đặt NuGet để khôi phục các tệp nhị phân bị thiếu khi xây dựng (để bạn kiểm soát nguồn thư mục gói, nhưng bỏ qua các tệp nhị phân). - Nhưng có vấn đề với điều đó: Có thể cập nhật nhị phân NuGet (không thay đổi số phiên bản) hoặc bị xóa, v.v. - Có thể xảy ra tất cả các loại điều kỳ lạ. Đừng để các bản dựng của bạn có cơ hội - hãy kiểm tra toàn bộ thư mục gói. Bạn sẽ tiết kiệm cho mình rất nhiều đau đầu.
BrainSlugs83

Câu trả lời:


497

Đây là thỏa thuận: Chúng tôi phải nói với cả NuGet TFS bỏ qua các gói, bởi vì NuGet đang cố gắng thực hiện các công việc liên quan đến kiểm soát nguồn mà nó hoàn toàn không nên làm (hình thức xấu, Microsoft!). Vì vậy, bạn phải làm hai điều.

Đầu tiên, thêm một tệp có tên .tfignorevào thư mục giải pháp (lưu ý thiếu ssau tf). Nội dung của nó phải như sau:

\packages

Điều đó nói với TFS bỏ qua thư mục gói của bạn. Bây giờ, bạn sẽ nghĩ rằng điều này cũng sẽ bỏ qua các repositories.configtập tin. Nhưng nó sẽ không. Tại sao? Ai biết được, những cách của Microsoft thật kỳ lạ và bí ẩn. Trên thực tế, tôi nghĩ đó là một phần của nội dung NuGet mà tôi phác thảo bên dưới, nhưng nếu điều đó đã được sửa trong tương lai và bạn muốn giữ repositories.configtệp thay vì để VS tạo lại nó, bạn có thể sử dụng:

\packages
!\packages\repositories.config

OK, vì vậy bây giờ nhờ vào .tfignoretệp của chúng tôi , TFS đang bỏ qua các gói của bạn. Mọi thứ đều ổn, phải không? SAI , bởi vì NuGet đang kiểm soát nguồn của bạn và thêm các gói vào các thay đổi đang chờ xử lý của bạn. Vì vậy, bây giờ hãy nói với NuGet để cắt nó ra.

Tạo một thư mục được gọi .nugettrong thư mục gốc của thư mục giải pháp của bạn. 1 Bây giờ, tạo một tệp có tên NuGet.configvà đặt nó vào thư mục mới 2 này . Nội dung của nó sẽ trông như thế này:

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

bây giờ các gói của bạn nên ở ngoài tầm kiểm soát nguồn. Chỉ cần nhớ thêm NuGet.config.tfignorecác tập tin vào kiểm soát nguồn để chúng không bao giờ bị mất.

EDIT: Nếu bạn gặp sự cố, bạn có thể muốn xóa thư mục gói của mình, kiểm tra thay đổi đó và sau đó thực hiện các bước trên.

C EDNG EDIT: Có vẻ như điều này sẽ không xảy ra với các phiên bản mới hơn của Nuget. Vì vậy, có thể nếu bạn chuyển sang VS / TFS 2017, vấn đề này sẽ được giải quyết mà không cần phải vượt qua các vòng trên.

1 . Thêm thư mục bằng Source Control Explorer; bấm chuột phải vào giải pháp-> Thêm thư mục ->. nuget
2 . Khi tôi phát hiện ra điều này bằng cách sử dụng VS 2013, tôi thấy NuGet.config phải vào thư mục .nuget. Ngay cả khi bạn đã có tệp NuGet.config trong thư mục gốc của thư mục giải pháp của bạn (bởi vì, giả sử, công ty của bạn có nguồn cấp dữ liệu nuget nội bộ). Tuy nhiên, một số ý kiến ​​đã chỉ ra rằng nó hoạt động tốt trong root giải pháp trong VS 2015. Cá nhân tôi đã chuyển sang sử dụng TFS ở chế độ git, vì vậy tôi không thể kiểm tra. Ngoài ra, nếu bạn có nguồn cấp dữ liệu tùy chỉnh, hãy đảm bảo rằng bạn có cả nguồn cấp dữ liệu tùy chỉnh và nuget.org làm khóa trong tệp Nuget.config hoặc đôi khi TFS sẽ quyết định ngẫu nhiên nó không thể khôi phục các gói.


1
Tôi tin rằng điều này đòi hỏi TFS 2012 ít nhất. stackoverflow.com/questions/14365929/
Mạnh

2
@zespri Tập tin nào đang chờ xóa? Gói NuGet? Điều đó không nên chờ xóa ... nó sẽ bị xóa! Sau khi bạn thực hiện những gì tôi đã đề xuất ở trên, hãy truy cập Team Explorer và xóa tất cả các gói Nuget có thể đã được kiểm soát nguồn. Hoặc chỉ cần xóa thư mục gói hoàn toàn. Tôi đã lăn lộn với thiết lập này trong nhiều tháng và chưa bao giờ gặp phải lỗi đó.
Pharylon

5
Fyi trong VS2015, nuget.config không phải ở trong /.nuget/. Nó hoạt động tuyệt vời trong các giải pháp gốc.
jnm2

141
Đối với bất kỳ ai tự hỏi làm thế nào để tạo một thư mục và tập tin bắt đầu bằng một khoảng thời gian, kết thúc tên bằng một khoảng thời gian khác. Vì vậy, đó sẽ là .tfignore. và .nuget.
Derek Ziemba

16
@DerekZiemba Thủ thuật gọn gàng! Tôi đã làm điều đó thông qua dòng lệnh trong suốt những năm qua. Tôi nghĩ rằng đáng để đề cập rằng khi bạn làm điều đó, dấu vết '.' sẽ bị xóa, ban đầu tôi nghĩ đề xuất của bạn là chỉ cần sống thêm '.' vào cuối

53

Một giải pháp thay thế cho những điều trên là như sau.

  • Thêm thư mục gói vào TFS (không có bất kỳ tệp hoặc thư mục con nào)
  • Nhấp chuột phải vào Thư mục Gói
  • Nhấp chuột trái Nâng cao
  • Nhấp vào Áo choàng

Điều đáng chú ý là giải pháp này sẽ cần được áp dụng cho mỗi không gian làm việc TFS. Nó đã làm việc đáng tin cậy hơn nhiều đối với tôi hơn là sử dụng .tfignoretệp.

Bạn có thể đọc thêm về phương pháp này trong bài viết trên blog Ngăn chặn TFS thêm các gói NuGet đã cài đặt vào kiểm soát nguồn .


23

đối với những người báo cáo rằng tùy chọn .tfignore không hoạt động với cài đặt nuget.config có thể được quan tâm - những bước này cuối cùng đã có hiệu quả với tôi:

  1. Xóa mọi thứ trong thư mục gói của tôi
  2. Đảm bảo TFS không có bất kỳ thay đổi nào xung quanh thư mục đó đang chờ xử lý
  3. Đóng VS
  4. Mở lại VS và tải lại giải pháp - sử dụng khôi phục Nuget để điền lại các gói Lưu ý không có thay đổi nào đang chờ xử lý đối với kiểm soát nguồn TFS

3
Điều này làm việc cho tôi sau khi áp dụng giải pháp của Pharylon, mà tôi đã làm sau khi khôi phục các gói.
dùng849924

1
Thực sự hữu ích, chúng tôi phải thực hiện việc này trong Thời gian ban đầu (Cam kết đầu tiên của tệp .tfignore cho TFS), nhưng không phải mỗi người. nếu tôi đúng
RajeshKdev

Tôi nghĩ rằng phương pháp này sẽ chỉ hoạt động trên máy tạo ra áo choàng. Tôi có đúng không? Vì vậy, điều này không giải quyết vấn đề gốc cho tất cả các thành viên trong nhóm.
panox

Một biến thể của điều này làm việc cho tôi - Tôi đảm bảo rằng không có gì từ Gói đã được cam kết, sau đó xóa thư mục gói khỏi đĩa. Tại thời điểm này, nó vẫn hiển thị dưới dạng các thay đổi đang chờ xử lý trong trình thám hiểm nhóm VS, vì vậy tôi đã chọn Hoàn tác các thay đổi đang chờ xử lý trong thư mục gói. Điều này đã làm sạch nó (mà tôi không cần phải đóng / mở lại) và họ sẽ không quay lại =)
từ

8

Thêm tệp nuget.config trong thư mục .nuget trong giải pháp của bạn. Thêm phần sau vào tệp nuget.config:

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

Vô hiệu hóaSourceControlIntegration là những gì tạo nên mánh khóe cho TFS Version Control.


Không có tác dụng - cũng không phải là một giải pháp toàn cầu.
Jaster

@So Nhiều yêu tinh: Bạn đã thử điều này trên một dự án / sln hoàn toàn mới chưa? (Chỉ để kiểm tra) Tôi tò mò điều gì trong thiết lập của bạn làm cho nó không hoạt động, vì nó hoạt động mỗi khi tôi tự làm và đó là cách được khuyến nghị để làm điều này với TFS / nuget. Ngoài ra, phiên bản nào của VS / TFS mà bạn thấy điều này?
Terje Sandstrøm

Visual studio 2013. Giải pháp mới, aye. Tôi đã làm việc xung quanh vấn đề này khi thêm một .tfignore bỏ qua rõ ràng từng gói.
Rất nhiều yêu tinh

2
Được rồi, đây thực sự là những gì "Kích hoạt khôi phục gói NuGet". Chỉ cần chắc chắn ĐÓNG và mở lại giải pháp của bạn! Tệp NuGet.config chỉ được đọc khi mở giải pháp của bạn.
Heliac

Điều này không làm việc cho tôi khá nhiều trên studio hình ảnh trực tuyến và VS2013. Tôi đã sử dụng Giải pháp Nhấp chuột phải> Bật Khôi phục Gói NuGet. Điều này sẽ thêm tệp Nuget.config vào gốc giải pháp Thêm .tfignore. Tôi thường làm điều này bằng cách thêm một tệp văn bản vào gốc giải pháp, để cho nó phát hiện ra điều đó và sau đó loại trừ bằng cách nhấp vào 'phát hiện thêm'> nhấp chuột phải bỏ qua. Sau đó kiểm tra mọi thứ trong đó, bao gồm mọi gói Sau đó xóa tất cả các gói trong giải pháp của bạn và kiểm tra thay đổi này (điều này sẽ xóa các gói khỏi TFS) Mở giải pháp và xây dựng sẽ thêm các gói nhưng TFS sẽ không nhận chúng.
David Wilton

7

Bạn cần phải sử dụng không gian làm việc cục bộ .tfignoređể làm việc. Các .tfignoretập tin phải nằm trong thư mục chứa các tập tin hoặc thư mục bạn muốn bỏ qua.

Vì vậy, nếu cấu trúc giải pháp của bạn trông như thế này:

\Project
   \Packages
   \OtherStuff
   foo.cs

Bạn sẽ đặt tệp .tfignore của mình vào \ Project:

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore

Nội dung của .tfignore trong trường hợp của bạn sẽ là:

\packages

Dưới đây là một số tài liệu dành cho bạn: http://msdn.microsoft.com/l Library / vstudio / ms245454 (v = vs.110) .aspx # tfignore


2
Tôi đã thêm các tệp .tfignore và khi tôi xây dựng dự án, nó vẫn cố gắng thêm các gói vào tfs. Có vẻ như tôi không thể làm gì để ngăn chặn nó.
Matt

Bạn có thể gửi các tập tin bỏ qua bạn đã thêm?
MrHinsh - Martin Hinshelwood

2
Xem docs.nuget.org/docs/reference/package-restore-with-team-build - đó là một lỗi với .tfignore NuGet, nhưng có thể được sửa chữa bằng cách nói NuGet đi xô tự cho SCM hội nhập.
dùng2864740

1
Có vẻ như ví dụ của bạn có thể sai, Nó nghĩ rằng nó nên packagesthay vì \packagesnhư là tương đối.
Martin

6

Bạn có thể thiết lập vĩnh viễn điều này một lần AppData\Roamingcho tất cả các giải pháp (cũ & mới)!

Trong %AppData%\NuGet\NuGet.Configtệp của bạn , thêm phần sau ngay trước </configuration>thẻ XML ...

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

... bạn có thể chỉ định bất kỳ đường dẫn nào bạn muốn - điều quan trọng là đặt nó BÊN NGOÀI không gian làm việc TFS của bạn!

Bây giờ bạn không bao giờ phải lo lắng về những thứ đó một lần nữa. Thư mục giải pháp của bạn sẽ không chứa bất kỳ gói nào nữa; thay vào đó, tất cả các giải pháp sẽ mặc định sử dụng vị trí gói tùy chỉnh của bạn.

LƯU Ý - Công việc này là trên cơ sở cho mỗi người dùng.


1
Âm thanh tốt và có thể đơn giản hơn nhiều. Bạn có phải thực thi thiết lập này trong nhóm của mình và đặc biệt là đăng nhập / thiết lập máy chủ xây dựng của bạn không nếu bạn thực hiện phương pháp này?
Chris F Carroll

Tôi sẽ tưởng tượng như vậy. Tôi đã không kiểm tra máy chủ xây dựng WRT này, xin lỗi. Tôi cũng sẽ tưởng tượng rằng các đường dẫn thư mục khác nhau đến các thư mục lib có thể gây ra sự cố (tôi nghĩ rằng một số gói NuGet có tham chiếu cứng đến các đường dẫn lib nếu tôi nhớ lại chính xác).
Heliac

2

Đặt giải pháp của bạn để khôi phục khi xây dựng, thư mục gói và tệp gói sẽ được kiểm tra nhưng các gói sẽ không.


1
Vui lòng giải thích "khôi phục trên bản dựng".
dùng2864740

10
Chức năng "bật khôi phục gói NuGet" của Visual Studio không được chấp nhận kể từ NuGet 2.7 - TFS 2013 vốn hỗ trợ khôi phục các gói NuGet mà không cần tệp NuGet.target và sửa đổi các tệp proj.
Daniel Mann

1

Nếu bạn đang sử dụng Git với TFS, bạn cần thêm tệp ".gitignore". Bạn có thể làm điều này trong "dự án nhóm | Cài đặt | 'thêm tệp bỏ qua'". Sau đó mở tệp và bỏ ghi chú câu lệnh bỏ qua tích hợp cho Gói Nuget.

Nếu bạn đang sử dụng TFVC và bạn đã cấu hình Không gian làm việc cục bộ, bạn có thể sử dụng tệp ".tfignore" để tôn vinh định dạng giống hệt với tệp Git. Tôi nghĩ bạn cần "gói /".


chúng tôi sử dụng TFSVC và như đã đề cập trong bài đăng đầu tiên - tệp .tfignore không hoạt động.
Jaster

Như tôi đã nói, bạn cần sử dụng đúng định dạng của .tfignore. Tôi tin rằng bạn đã chém sai đường vòng
MrHinsh - Martin Hinshelwood

@MrHinsh sau khi nói chuyện với Ed Thompson, tệp .tfignore không hoạt động chính xác. Các .gitignore mặc dù.
DaveShaw

@Ed cần phải đi sửa nó;)
MrHinsh - Martin Hinshelwood

1

Điều này không làm việc cho tôi khá nhiều trên studio hình ảnh trực tuyến và VS2013.

  • Nhấp chuột phải vào Giải pháp> Kích hoạt Khôi phục Gói NuGet. Điều này sẽ thêm tệp Nuget.config vào giải pháp

nhập mô tả hình ảnh ở đây

  • Thêm .tfignore. Tôi thường làm điều này bằng cách thêm một tệp văn bản vào gốc giải pháp, để cho nó phát hiện ra điều đó và sau đó loại trừ bằng cách nhấp vào 'phát hiện thêm'> nhấp chuột phải bỏ qua.

nhập mô tả hình ảnh ở đây

  • Thêm các gói vào .tfignore và bảo nó bao gồm repositories.config

nhập mô tả hình ảnh ở đây

Từ những bình luận khác, có vẻ như lực lượng của bạn có thể thay đổi vào thời điểm này. Đây là những gì tôi làm:

  • Kiểm tra mọi thứ trong, bao gồm bất kỳ gói.

  • Xóa tất cả các gói trong giải pháp của bạn và sau đó kiểm tra thay đổi này (điều này sẽ xóa các gói khỏi TFS)

  • Mở giải pháp và xây dựng sẽ thêm các gói vào dự án nhưng TFS sẽ không chọn chúng.


2
Đầu tiên, Bật khôi phục Nuget không được dùng nữa và không có trong VS 2015, nếu bạn đi theo lộ trình đó sau. Thứ hai: Kiểm tra các gói và dll trong sẽ thêm chúng vào kiểm soát nguồn, xóa chúng trong giải pháp và kiểm tra xem trong đó sẽ KHÔNG xóa chúng khỏi SC, chỉ từ đầu chi nhánh của bạn. -
Terje Sandstrøm

1
@ TerjeSandstrøm đã thực hiện, nhưng câu hỏi là cụ thể cho năm 2013. Có bạn đúng, bạn sẽ phải sử dụng tf hủy để xóa vĩnh viễn khỏi kiểm soát nguồn, nhưng tôi không tìm thấy cách nào khác để TFS tuân thủ tệp .tfignore
David Wilton

1

Giải pháp hiệu quả với tôi là tạo cả .tfignore cài đặt sau trong Nuget.Config:

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

.Tfignore của tôi chứa dòng này:

\packages

[Tôi đang sử dụng Visual Studio 2015 Update 2]

Điều này không lý tưởng và hiện được ghi lại dưới dạng sự cố mở trên github / nuget:

Giúp dễ dàng bỏ qua các gói từ TFVC # 493


0

Câu trả lời của Terje không hoạt động mọi lúc đối với tôi, đôi khi nó sẽ hoạt động trong một thời gian, nhưng sau đó nó sẽ gây ra một gánh nặng "thêm" cho tôi một lần nữa.

Cách duy nhất tôi tìm thấy để giải quyết vấn đề này vĩnh viễn là Cloak thư mục gói trong Vùng làm việc của tôi.

Ví dụ:

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

Điều đó rất kỳ lạ. Điều này có xảy ra với các phiên bản Visual Studio và NuGet mới nhất không?
Terje Sandstrøm

Có, tôi chạy VS 2013.4 và NuGet 2.8 trên không gian làm việc cục bộ TFS 2012.
DaveShaw

Bạn phải che giấu MỌI thư mục gói cho các dự án và chính sách. Ngoài ra, mọi thành viên của Nhóm phải lặp lại quy trình cho mọi không gian làm việc
Jaster

Cloak không phải là một câu trả lời tốt và hai câu trả lời khác ở trên làm việc và theo thiết kế. Phải có một cái gì đó khác đang diễn ra trong môi trường của bạn.
MrHinsh - Martin Hinshelwood

@MrHinsh - nhiều người trong phòng đã xem xét điều này và nó chỉ bị hỏng. Có vẻ ổn với Git, nhưng khi sử dụng TFVC thì nó luôn hoạt động.
DaveShaw

0

Tôi gặp vấn đề tương tự. /packagesnên làm việc nhưng không cho tôi. packages*.*Đã làm việc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.