Czy powinniśmy uwzględnić folder Nuget PACKAGE w kontroli wersji?

68

chciałbym wiedzieć

W projekcie C # lub VB.NET powinniśmy dołączyć folder PACKAGE (folder pakietu samorodków, który jest tworzony w katalogu głównym mojego projektu, który zawiera pliki nupkg i inną zawartość) do naszego repozytorium kontroli źródła (na przykład Git).

Bastien Vandamme
źródło
Absolutnie tak , ponieważ te pliki są częścią twojego kodu i twój projekt nie zbuduje się bez nich.
Sharky
Zadałem podobne pytanie na SO już dawno temu. Możesz tam również znaleźć odpowiedzi: stackoverflow.com/questions/1710027/… :)
cwap
Zastanawiam się, dlaczego nikt w świecie Maven nie pyta „czy powinniśmy uwzględniać biblioteki innych firm w kontroli wersji”. Znajdź jakiś solidny argument dla NIE popełniania bibliotek, choć niezbyt przekonujący.
Hoàng Long

Odpowiedzi:

28

Minęło dużo czasu, a NuGet się zmienił, więc oto nowa odpowiedź.

NuGet nie tworzy już folderu pakietów wewnątrz struktury źródłowej. Zamiast tego jest jeden w katalogu użytkownika ( %HOME%\.nuget\packagesa konkretnie), w którym umieszcza wszystkie pobierane pakiety, a projekty po prostu się do nich odwołują.

Więc prosta odpowiedź brzmi: nie, nie powinieneś. Jeśli martwisz się o pakiety, które musisz zniknąć, powinieneś utworzyć lokalne dublowanie NuGet, którego kopię zapasową tworzysz osobno.

Sebastian Redl
źródło
6
Jestem na VS2015 (weź pod uwagę, że VS2017 został wydany zaledwie 3 dni przed napisaniem tej odpowiedzi), a folder pakietu jest obecny w moim katalogu głównym rozwiązania. Jestem ciekawy, jak i kiedy NuGet się zmieniło.
Teejay
NuGet zmienił się wraz z wersją 3, która została wydana poza pasmem w czasie VS2015.
Sebastian Redl
Właśnie sprawdziłem na moim komputerze roboczym i paczki są tam, o których wspomniałeś. Ale na moim komputerze domowym są w katalogu projektu. Oba są na VS2015 (professional @ work, community @ home), a wersja domowa to najnowsza instalacja ... To dziwne.
Teejay
12
Właśnie zainstalowałem VS 2017 w zeszłym tygodniu, wczoraj utworzyłem nowy projekt i w moim projekcie znajduje się katalog pakietów.
Jeremy
2
Co robisz dla CI? czy to robisz Pobierz wszystkie pakiety nuget raz po raz? (TBH: Ja sam jestem bardzo niejasny, jaka jest moja opinia)
Tomer W
50

To zależy.

Sprawdź odpowiedź Bart van Ingen Schenau, aby ustalić, czy w ogóle można zignorować packagesfolder.

Zasadniczo: tak, NuGet został zaprojektowany tak, abyś mógł zignorować packagesfolder, a NuGet pobierze wszystko z Internetu, jeśli go brakuje.

Ale czy powinieneś to zignorować? Mówię: to zależy.
IMO to pytanie „czy możemy kontynuować pracę w przypadku, gdy repozytorium pakietów nie jest dostępne” (czy to tymczasowo czy na stałe)

W przypadku moich osobistych projektów OSS packagesfolder jest ignorowany we wszystkich.
Gdy nuget.org jest offline, poczekam i będę kontynuować kolejny dzień.

Ale w pracy jest coś innego.
Pewnie, pewnie nadal masz paczki lokalnie na niektórych komputerach, ale oszczędzasz trochę miejsca warte kłopotów, gdy kompilacje się psują, ponieważ serwer kompilacji nie może uzyskać dostępu do nuget.org?

Uznaliśmy, że miejsce jest tanie i nie chcemy kłopotów, dlatego przekazujemy packagesfolder do kontroli źródła.

Christian Specht
źródło
1
Jak często nuget.org jest niedostępny?
Bartosz
4
Prawdopodobnie niezbyt często. Ale może powinienem powiedzieć „nieosiągalny” zamiast „offline”. Kilka lat temu mieliśmy wypadek w pracy, w którym koparka przypadkowo przecięła kabel internetowy do naszego budynku. Naprawa zajęła ponad dzień. Gdybyśmy polegali na nuget.org, nie bylibyśmy w stanie zbudować naszych projektów. (tak, wiem, obecnie NuGet buforuje paczki lokalnie ... ale nie wtedy)
Christian Specht
Powiem, że czasy kompilacji są znacznie dłuższe, gdy nie meldujesz się w folderze pakietów, ponieważ spędza on większość czasu na pobieraniu pakietów podczas przywracania pakietu.
AaronLS
29

Podstawowa zasada dotycząca tego, co trafia do repozytorium kontroli źródła, polega na tym, że przechowuje się tam wszystko, co jest potrzebne do zbudowania, przetestowania, wdrożenia i wykonania projektu i którego nie można wygenerować z elementów już obecnych w repozytorium .

Innymi słowy, jeśli możesz wyrzucić folder PAKIET i jego zawartość bez wpływu na twoją zdolność do kontynuowania pracy nad projektem (kompilacja może potrwać dłużej, ale nie musisz sam wytropić i zainstalować niczego), folder może być bezpiecznie wykluczony z repozytorium.
Jeśli folder zawiera pakiety innych firm, których pobranie może zająć dużo czasu lub może stać się niedostępne, może to być powód do dodania ich do repozytorium.

Bart van Ingen Schenau
źródło
20
Dodam, że powinieneś przechowywać wersję dowolnego kodu innej firmy używanego w projekcie bezpiecznie przechowywaną, na wypadek, gdyby projekt innej firmy został usunięty, witryna, na której się znajduje, zniknęła itp. Dobrym miejscem do tego jest repozytorium kontroli wersji . Daje to również możliwość przywrócenia poprzedniej wersji tego kodu, jeśli to konieczne.
Wygięty