Haruskah kita menyertakan folder PAKET Nuget dalam kontrol versi?

68

Saya ingin tahu

Dalam proyek C # atau VB.NET kita harus memasukkan folder PAKET (folder paket nugget yang dibuat ke root proyek saya yang berisi file nupkg dan konten lainnya) ke repositori kontrol sumber kami (misalnya Git).

Bastien Vandamme
sumber
Benar-benar Ya , karena file-file ini adalah bagian dari kode Anda dan proyek Anda tidak akan dibangun tanpanya.
Sharky
Saya mengajukan pertanyaan serupa pada SO beberapa waktu lalu. Anda juga dapat mencari jawaban di sana: stackoverflow.com/questions/1710027/... :)
cwap
Saya bertanya-tanya mengapa tidak ada seorang pun di dunia Maven yang bertanya "haruskah kita memasukkan lib pihak ke-3 dalam kontrol versi". Temukan beberapa argumen tandingan yang kuat untuk TIDAK melakukan lib, meskipun tidak terlalu meyakinkan.
Hoàng Long

Jawaban:

28

Banyak waktu telah berlalu, dan NuGet telah berubah, jadi inilah jawaban baru.

NuGet tidak lagi membuat folder paket di dalam struktur sumber Anda. Sebaliknya ada satu di direktori pengguna Anda ( %HOME%\.nuget\packageslebih spesifik) di mana ia meletakkan semua paket yang diunduh, dan proyek hanya referensi ini.

Jadi jawaban sederhana hari ini adalah tidak, Anda seharusnya tidak. Jika Anda khawatir tentang paket yang harus Anda hapus, Anda harus membuat mirror NuGet lokal yang Anda buat cadangannya secara terpisah.

Sebastian Redl
sumber
6
Saya menggunakan VS2015 (pertimbangkan bahwa VS2017 telah dirilis hanya 3 hari sebelum Anda menulis jawaban ini), dan folder paket ada di root solusi saya. Saya ingin tahu tentang bagaimana dan kapan NuGet telah berubah.
Teejay
NuGet berubah dengan versi 3, yang dirilis keluar dari band kadang-kadang selama jangka waktu VS2015.
Sebastian Redl
Saya baru saja memeriksa komputer kerja saya dan paket di mana Anda sebutkan. Tetapi di komputer rumah saya mereka berada di direktori proyek. Keduanya ada di VS2015 (profesional @ kerja, komunitas @ rumah) dan rumah adalah instalasi yang sangat baru ... Itu aneh.
Teejay
12
Baru saja menginstal VS 2017 minggu lalu, membuat proyek baru kemarin dan ada direktori paket di proyek saya.
Jeremy
2
Apa yang Anda lakukan untuk CI? apakah Anda membuatnya Download semua paket nuget berulang kali? (TBH: Saya sendiri, sangat tidak jelas apa pendapat saya)
Tomer W
50

Tergantung.

Periksa jawaban Bart van Ingen Schenau untuk menentukan apakah mungkin untuk mengabaikan packagesfolder sama sekali.

Pada dasarnya: ya, NuGet dirancang sehingga Anda dapat mengabaikan packagesfolder dan NuGet akan menarik segala sesuatu dari Internet jika hilang.

Tetapi haruskah Anda mengabaikannya? Saya katakan: itu tergantung.
IMO itu pertanyaan "bisakah kita terus bekerja jika repositori paket tidak tersedia" (baik sementara atau permanen)

Untuk proyek OSS pribadi saya, packagesfolder saya diabaikan semuanya.
Ketika nuget.org sedang offline, saya hanya akan menunggu dan melanjutkan hari lain.

Tapi ini sesuatu yang berbeda di tempat kerja.
Tentu, Anda mungkin masih memiliki paket-paket secara lokal pada beberapa mesin, tetapi apakah menghemat beberapa ruang tidak ada masalah ketika build Anda rusak karena server build Anda tidak dapat menjangkau nuget.org?

Kami memutuskan bahwa ruang murah dan kami tidak ingin kerumitan, itu sebabnya kami melakukan packagesfolder ke kontrol sumber.

Christian Specht
sumber
1
Seberapa sering nuget.org tidak tersedia?
Bartosz
4
Mungkin tidak terlalu sering. Tapi mungkin saya seharusnya mengatakan "tidak terjangkau" daripada "offline". Beberapa tahun yang lalu, kami memiliki insiden di tempat kerja di mana ekskavator secara tidak sengaja memotong kabel internet ke gedung kami. Butuh waktu lebih dari satu hari untuk diperbaiki. Jika kami mengandalkan nuget.org, kami tidak akan dapat membangun proyek kami. (ya, saya tahu, saat ini NuGet melakukan cache paket-paket secara lokal ... tetapi tidak saat itu)
Christian Specht
Saya akan mengatakan waktu build jauh lebih lama ketika Anda tidak checkin folder paket karena menghabiskan sebagian besar paket build time retrieving selama restore paket.
AaronLS
29

Aturan dasar untuk apa yang masuk ke repositori kontrol sumber adalah Anda menyimpan di sana segala sesuatu yang berkaitan dengan proyek yang Anda perlukan untuk dapat membangun, menguji, menyebarkan dan menjalankan proyek dan yang tidak dapat dihasilkan dari item-item yang sudah ada dalam repositori .

Dengan kata lain, jika Anda dapat membuang folder PAKET dan isinya tanpa memengaruhi kemampuan Anda, terus mengerjakan proyek (pembuatan mungkin memakan waktu lebih lama, tetapi Anda tidak perlu memburu dan menginstal sendiri), maka folder tersebut dapat ditinggalkan dengan aman dari repositori.
Jika folder tersebut berisi paket pihak ketiga yang mungkin membutuhkan waktu lama untuk diunduh atau yang mungkin tidak tersedia, maka itu mungkin menjadi alasan untuk menambahkannya ke repositori Anda.

Bart van Ingen Schenau
sumber
20
Saya akan menambahkan bahwa Anda harus menyimpan versi kode pihak ke-3 apa pun yang digunakan dalam proyek yang disimpan dengan aman, jika proyek pihak ketiga dihapus, situs hosting itu hilang dll. Tempat yang baik untuk melakukannya adalah dalam repositori kontrol versi Anda . Itu juga memberi Anda kesempatan untuk mengembalikan ke versi sebelumnya dari kode itu, jika perlu.
Bent