Chúng ta có nên bao gồm thư mục Nuget PACKAGE trong kiểm soát phiên bản không?


68

Tôi muốn biết

Trong dự án C # hoặc VB.NET, chúng ta nên đưa thư mục PACKAGE (thư mục gói nugget được tạo vào thư mục gốc của dự án chứa tệp nupkg và nội dung khác) vào kho lưu trữ kiểm soát nguồn của chúng tôi (ví dụ Git).


Hoàn toàn , bởi vì các tệp này là một phần của mã của bạn và dự án của bạn sẽ không được xây dựng mà không có chúng.
Sharky

Tôi đã hỏi một câu hỏi tương tự trên SO cùng thời gian trước. Bạn cũng có thể tìm ở đó để tìm câu trả lời: stackoverflow.com/questions/1710027/, :)
cwap 10/03/2017

Tôi tự hỏi tại sao không ai trong thế giới Maven hỏi "chúng ta có nên đưa lib của bên thứ 3 vào kiểm soát phiên bản không". Tìm một số đối số chắc chắn cho việc KHÔNG cam kết libs, mặc dù không thuyết phục lắm.
Hoàng Long

Câu trả lời:


28

Đã có rất nhiều thời gian trôi qua và NuGet đã thay đổi, vì vậy đây là một câu trả lời mới.

NuGet không còn tạo thư mục gói bên trong cấu trúc nguồn của bạn. Thay vào đó, có một trong thư mục người dùng của bạn ( %HOME%\.nuget\packagescụ thể) nơi nó đặt tất cả các gói mà nó tải xuống và các dự án chỉ tham chiếu những gói này.

Vì vậy, câu trả lời đơn giản ngày nay là không, bạn không nên. Nếu bạn lo lắng về các gói bạn cần biến mất, bạn nên tạo một gương NuGet cục bộ mà bạn sao lưu riêng.


6
Tôi đang dùng VS2015 (xem xét rằng VS2017 đã được phát hành chỉ 3 ngày trước khi bạn viết câu trả lời này) và thư mục gói có mặt trong thư mục gốc giải pháp của tôi. Tôi tò mò về cách thức và thời điểm NuGet đã thay đổi.
Teejay

NuGet đã thay đổi với phiên bản 3, đôi khi được phát hành ngoài băng trong khung thời gian VS2015.
Sebastian Redl

Tôi chỉ kiểm tra trên máy tính làm việc của tôi và các gói là nơi bạn đề cập. Nhưng trên máy tính ở nhà của tôi, họ đang ở trong thư mục dự án. Cả hai đều có trên VS2015 (chuyên nghiệp @ công việc, cộng đồng @ home) và nhà ở là một bản cài đặt rất gần đây ... Thật lạ.
Teejay

12
Mới cài đặt VS 2017 tuần trước, đã tạo một dự án mới vào ngày hôm qua và có một thư mục gói trong dự án của tôi.
Jeremy

2
Bạn làm gì cho CI? Bạn có làm cho nó Tải xuống tất cả các gói nuget nhiều lần không? (TBH: Bản thân tôi, tôi không rõ ý kiến ​​của mình là gì)
Tomer W

50

Nó phụ thuộc.

Kiểm tra câu trả lời của Bart van Ingen Schenau để xác định xem có thể bỏ qua packagesthư mục nào không.

Về cơ bản: có, NuGet được thiết kế để bạn có thể bỏ qua packagesthư mục và NuGet sẽ lấy mọi thứ từ Internet nếu thiếu.

Nhưng bạn có nên bỏ qua nó? Tôi nói: nó phụ thuộc.
IMO đó là một câu hỏi "chúng ta có thể tiếp tục làm việc trong trường hợp kho lưu trữ gói không có sẵn" (có thể là tạm thời hoặc vĩnh viễn)

Đối với các dự án OSS cá nhân của tôi, tôi có packagesthư mục bị bỏ qua trong tất cả chúng.
Khi nuget.org ngoại tuyến, tôi sẽ đợi và tiếp tục một ngày khác.

Nhưng đó là một cái gì đó khác nhau trong công việc.
Chắc chắn, bạn có thể vẫn có các gói cục bộ trên một số máy, nhưng việc tiết kiệm một số dung lượng có giá trị rắc rối khi bản dựng của bạn bị hỏng vì máy chủ bản dựng của bạn không thể truy cập nuget.org?

Chúng tôi đã quyết định rằng không gian là rẻ và chúng tôi không muốn rắc rối, đó là lý do tại sao chúng tôi cam kết packageskiểm soát thư mục.


1
Làm thế nào thường xuyên là nuget.org không có sẵn?
Bartosz

4
Có lẽ không thường xuyên lắm. Nhưng có lẽ tôi nên nói rằng không thể truy cập được trên mạng, thay vì trực tuyến. Vài năm trước, chúng tôi đã gặp sự cố tại nơi làm việc khi một máy xúc vô tình cắt cáp internet đến tòa nhà của chúng tôi. Mất hơn một ngày để sửa chữa. Nếu chúng tôi đã dựa vào nuget.org, chúng tôi sẽ không thể xây dựng các dự án của mình. (vâng, tôi biết, ngày nay NuGet lưu trữ các gói cục bộ ... nhưng không quay lại sau đó)
Christian Specht

Tôi sẽ nói thời gian xây dựng lâu hơn nhiều khi bạn không kiểm tra thư mục gói vì nó dành phần lớn thời gian lấy gói trong quá trình khôi phục gói.
AaronLS

29

Nguyên tắc cơ bản cho những gì đi vào kho lưu trữ kiểm soát nguồn là bạn lưu trữ ở đó mọi thứ liên quan đến dự án mà bạn cần để có thể xây dựng, kiểm tra, triển khai và thực hiện dự án và không thể được tạo từ các mục đã có trong kho lưu trữ .

Nói cách khác, nếu bạn có thể vứt bỏ thư mục GÓI và nội dung của nó mà không ảnh hưởng đến khả năng của bạn thì hãy tiếp tục làm việc với dự án (quá trình xây dựng có thể mất nhiều thời gian hơn, nhưng bạn không phải tự mình tìm kiếm và cài đặt bất cứ thứ gì), thì thư mục có thể được an toàn rời khỏi kho lưu trữ.
Nếu thư mục chứa các gói của bên thứ 3 có thể mất nhiều thời gian để tải xuống hoặc có thể không khả dụng, thì đó có thể là lý do để thêm chúng vào kho lưu trữ của bạn.


20
Tôi sẽ nói thêm rằng bạn nên giữ một phiên bản của bất kỳ mã bên thứ 3 nào được sử dụng trong dự án được lưu trữ an toàn, trong trường hợp dự án của bên thứ 3 bị xóa, trang web lưu trữ bị mất, v.v. Một nơi tốt để làm điều đó là trong kho lưu trữ kiểm soát phiên bản của bạn . Điều đó cũng cho bạn cơ hội quay trở lại phiên bản trước của mã đó, nếu cần.
Bent
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.