Чи слід включати папку Nuget PACKAGE в контроль версій?


68

Я хотів би знати

У проект C # або VB.NET слід включити папку PACKAGE (папку пакетів самородок, створену для кореня мого проекту, що містить файли nupkg та інший вміст) до нашого сховища джерела управління (наприклад, Git).


Абсолютно так , оскільки ці файли є частиною вашого коду, і ваш проект не буде створюватися без них.
Шаркі

Я задавав подібне запитання щодо SO одночасно. Ви також можете подивитися тут відповіді: stackoverflow.com/questions/1710027 / ... :)
cwap

Цікаво, чому ніхто в світі Мейвена не запитує, "чи слід включати сторонні лайки в контроль версій". Знайдіть твердий контр-аргумент для того, щоб НЕ здійснювати конверти, хоч і не дуже переконливо.
Хоанг Лонг

Відповіді:


28

Минуло багато часу, і NuGet змінився, тож ось нова відповідь.

NuGet більше не створює папку пакунків всередині вашої структури джерела. Натомість, у вашому користувальницькому каталозі є один ( %HOME%\.nuget\packagesщоб бути конкретним), куди він розміщує всі завантажені ним пакети, а проекти просто посилаються на них.

Тож проста відповідь у ці дні - ні, ви не повинні. Якщо ви турбуєтесь про те, що пакунки зникають, вам слід створити локальне дзеркало NuGet, яке ви резервно копіюєте окремо.


6
Я на VS2015 (врахуйте, що VS2017 був випущений лише за 3 дні до того, як ви написали цю відповідь), і папка пакунків присутня в моєму корені рішення. Мені цікаво, як і коли змінився NuGet.
Teejay

NuGet змінився з версією 3, яка була випущена з смуги колись протягом часового періоду VS2015.
Себастьян Редл

Я щойно перевірив на своєму робочому комп’ютері і там, де ви згадали, пакунки. Але на моєму домашньому комп’ютері вони знаходяться в каталозі проектів. Обидва є на VS2015 (професійний @ робота, співтовариство @ дім), а домашній - це зовсім недавня установка ... Це дивно.
Teejay

12
Щойно встановлений VS 2017 минулого тижня, вчора створив новий проект, і в моєму проекті є каталог пакунків.
Джеремі

2
Що ви робите для CI? Ви робите це Завантажуйте всі цілі пакунки знову і знову? (TBH: Мені самому дуже незрозуміло, що таке моя думка)
Tomer W

50

Це залежить.

Перевірте відповідь Барта ван Інген Шенау, щоб визначити, чи можна packagesвзагалі ігнорувати папку.

В основному: так, NuGet розроблений так, що ви можете ігнорувати packagesпапку, і NuGet витягне все з Інтернету, якщо його немає.

Але чи варто це ігнорувати? Я кажу: це залежить.
IMO - це питання "чи можна продовжувати роботу, якщо сховище пакетів недоступне" (тимчасово чи постійно)

Для моїх особистих проектів OSS у мене packagesпапка проігнорована у всіх.
Коли nuget.org офлайн, я просто зачекаю і продовжу ще один день.

Але це на роботі щось інше.
Звичайно, у вас, ймовірно, ще є пакети локально на якійсь машині, але ви економите місце, варті клопоту, коли ваші збірки порушуються, оскільки сервер збирання не може дійти до nuget.org?

Ми вирішили, що простір дешевий і ми не хочемо клопоту, тому ми робимо packagesпапку для управління джерелами.


1
Як часто сайт nuget.org недоступний?
Бартош

4
Напевно, не дуже часто. Але, можливо, я мав би сказати "недоступний" замість "офлайн". Кілька років тому у нас трапився інцидент на роботі, коли екскаватор випадково перерізав інтернет-кабель до нашої будівлі. На ремонт потребували більше доби. Якби ми покладалися на nuget.org, ми б не змогли побудувати наші проекти. (так, я знаю, нині NuGet кешує пакети локально ... але не тоді)
Крістіан Спехт,

Я скажу, що час збирання набагато довший, коли ви не перевіряєте папку пакунків, оскільки вона витрачає більшу частину часу на збирання пакетів під час відновлення пакету.
AaronLS

29

Основне правило того, що переходить у сховище управління джерелами, полягає в тому, що ви зберігаєте там усе, що стосується проекту, який вам потрібно мати можливість складати, тестувати, розгортати та виконувати проект і який неможливо генерувати з елементів, вже наявних у сховищі .

Іншими словами, якщо ви зможете викинути папку PACKAGE та її вміст, не впливаючи на вашу здатність продовжувати працювати над проектом (збірка може зайняти більше часу, але вам не доведеться самостійно шукати і встановлювати що-небудь), тоді папка може бути безпечно залишеним із сховища.
Якщо в папці містяться сторонні пакети, які можуть зайняти тривалий час для завантаження або можуть стати недоступними, то це може бути причиною додати їх до вашого сховища.


20
Я хотів би додати, що ви повинні зберігати версію будь-якого стороннього коду, який використовується у проекті, що зберігається безпечно, у випадку, якщо сторонній проект буде видалений, сайт, на якому розміщено його, відсутній і т.д. . Це також дає можливість відмовитись від попередньої версії цього коду, якщо це необхідно.
Бентоване
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.