Sollten wir den Ordner Nuget PACKAGE in die Versionskontrolle einbeziehen?

68

ich würde gerne wissen

In C # - oder VB.NET-Projekten sollten wir den PACKAGE-Ordner (Nugget-Paketordner, der im Stammverzeichnis meines Projekts erstellt wird und die nupkg-Dateien und andere Inhalte enthält) in unser Quellcodeverwaltungs-Repository (z. B. Git) aufnehmen.

Bastien Vandamme
quelle
Absolut ja , da diese Dateien Teil Ihres Codes sind und Ihr Projekt ohne sie nicht erstellt werden kann.
Sharky
Ich habe vor einiger Zeit eine ähnliche Frage zu SO gestellt. Dort können Sie auch nach Antworten suchen: stackoverflow.com/questions/1710027/… :)
cwap
Ich frage mich, warum niemand in der Maven-Welt fragt, "ob wir Bibliotheken von Drittanbietern in die Versionskontrolle einbeziehen sollen". Finden Sie ein solides Gegenargument für NOT Committing Libs, wenn auch nicht sehr überzeugend.
Hoàng Long

Antworten:

28

Es ist viel Zeit vergangen und NuGet hat sich geändert. Hier ist eine neue Antwort.

NuGet erstellt keinen Paketordner mehr in Ihrer Quellstruktur. Stattdessen befindet sich in Ihrem Benutzerverzeichnis ( %HOME%\.nuget\packagesum genau zu sein) eines, in dem alle heruntergeladenen Pakete abgelegt werden. Projekte verweisen lediglich auf diese Pakete.

Die einfache Antwort lautet heutzutage: Nein, das sollten Sie nicht. Wenn Sie befürchten, dass Pakete verschwinden, sollten Sie einen lokalen NuGet-Spiegel erstellen, den Sie separat sichern.

Sebastian Redl
quelle
6
Ich bin bei VS2015 (bedenke, dass VS2017 erst 3 Tage vor dem Schreiben dieser Antwort veröffentlicht wurde) und der Paketordner in meinem Lösungsstamm vorhanden ist. Ich bin gespannt, wie und wann sich NuGet geändert hat.
Teejay
NuGet änderte sich mit Version 3, die irgendwann während des VS2015-Zeitraums außerhalb der Band veröffentlicht wurde.
Sebastian Redl
Ich habe gerade meinen Arbeitscomputer überprüft und die Pakete sind dort, wo Sie sie erwähnt haben. Auf meinem Heimcomputer befinden sie sich jedoch im Projektverzeichnis. Beide sind auf VS2015 (Professional @ Work, Community @ Home) und die Home-Installation ist eine sehr junge Installation ... Das ist seltsam.
Teejay
12
Gerade letzte Woche VS 2017 installiert, gestern ein neues Projekt erstellt und es gibt ein Paketverzeichnis in meinem Projekt.
Jeremy
2
Was machst du für CI? schaffen Sie es? Laden Sie immer wieder alle Nuget-Pakete herunter? (TBH: Ich selbst bin sehr unklar, was meine Meinung ist)
Tomer W
50

Es hängt davon ab, ob.

Überprüfen Sie die Antwort von Bart van Ingen Schenau, um festzustellen, ob der packagesOrdner überhaupt ignoriert werden kann .

Grundsätzlich gilt: Ja, NuGet ist so konzipiert, dass Sie den packagesOrdner ignorieren können, und NuGet holt alles aus dem Internet, wenn es fehlt.

Aber solltest du es ignorieren? Ich sage: es kommt darauf an.
IMO ist es eine Frage von "können wir weiterarbeiten, falls das Paket-Repository nicht verfügbar ist" (sei es vorübergehend oder dauerhaft)

Bei meinen persönlichen OSS-Projekten wird der packagesOrdner in allen ignoriert.
Wenn nuget.org offline ist, warte ich einfach und fahre an einem anderen Tag fort.

Aber bei der Arbeit ist es etwas anderes.
Sicher, Sie haben die Pakete wahrscheinlich immer noch lokal auf einem Computer, sparen aber Speicherplatz, der sich lohnt, wenn Ihre Builds nicht mehr funktionieren, weil Ihr Build-Server nicht auf nuget.org zugreifen kann.

Wir haben entschieden, dass der Speicherplatz billig ist und wir nicht den Ärger wollen, deshalb übergeben wir den packagesOrdner an die Quellcodeverwaltung.

Christian Specht
quelle
1
Wie oft ist nuget.org nicht verfügbar?
Bartosz
4
Wahrscheinlich nicht sehr oft. Aber vielleicht hätte ich "nicht erreichbar" statt "offline" sagen sollen. Vor einigen Jahren hatten wir einen Zwischenfall bei der Arbeit, bei dem ein Bagger versehentlich das Internetkabel zu unserem Gebäude durchtrennte. Die Reparatur dauerte mehr als einen Tag. Wenn wir uns auf nuget.org verlassen hätten, hätten wir unsere Projekte nicht bauen können. (Ja, ich weiß, heutzutage speichert NuGet die Pakete lokal zwischen ... aber nicht damals)
Christian Specht
Ich werde sagen, dass die Erstellungszeiten viel länger sind, wenn Sie den Paketordner nicht einchecken, da der größte Teil der Erstellungszeit für das Abrufen von Paketen während der Paketwiederherstellung benötigt wird.
AaronLS
29

Die Grundregel für ein Quellcodeverwaltungs-Repository lautet, dass Sie dort alles speichern, was mit einem Projekt zusammenhängt, das Sie zum Erstellen, Testen, Bereitstellen und Ausführen des Projekts benötigen und das nicht aus Elementen generiert werden kann, die bereits im Repository vorhanden sind .

Mit anderen Worten, wenn Sie den PACKAGE-Ordner und seinen Inhalt wegwerfen können, ohne Ihre Fähigkeit zu beeinträchtigen, arbeiten Sie weiter am Projekt (der Build kann länger dauern, aber Sie müssen nichts selbst suchen und installieren), dann kann der Ordner sicher aus dem Repository ausgelassen werden.
Wenn der Ordner Pakete von Drittanbietern enthält, deren Download möglicherweise lange dauert oder die möglicherweise nicht mehr verfügbar sind, ist dies möglicherweise ein Grund, sie trotzdem zu Ihrem Repository hinzuzufügen.

Bart van Ingen Schenau
quelle
20
Ich möchte hinzufügen, dass Sie eine Version des im Projekt verwendeten Drittanbieter-Codes sicher aufbewahren sollten, falls das Drittanbieter-Projekt entfernt wird, die Website, auf der es gehostet wird, nicht mehr vorhanden ist usw. Ein guter Ort dafür ist Ihr Versionskontroll-Repository . Dies gibt Ihnen auch die Möglichkeit, bei Bedarf ein Rollback auf eine frühere Version dieses Codes durchzuführen.
Bent