640 Stimmen

Soll composer.lock an die Versionskontrolle übergeben werden?

Ich bin ein wenig verwirrt mit composer.lock in einer Anwendung mit einem Repository verwendet werden.

Ich habe viele Leute gesehen, die sagten, wir sollten nicht .gitignore composer.lock aus dem Repository.

Wenn ich meine Bibliotheken in meiner Entwicklungsumgebung aktualisiere, habe ich eine neue composer.lock aber ich werde nicht in der Lage sein, sie in der Produktion zu aktualisieren, oder?

Entstehen dadurch nicht Konflikte mit dieser Datei?

789voto

meza Punkte 8157

Wenn Sie Ihre Bibliotheken aktualisieren, müssen Sie auch die Sperrdatei übertragen. Sie besagt im Grunde, dass Ihr Projekt für die spezifischen Versionen der von Ihnen verwendeten Bibliotheken gesperrt ist.

Wenn Sie Ihre Änderungen übertragen und jemand zieht Ihren Code und aktualisiert die Abhängigkeiten, sollte die Sperrdatei unverändert bleiben. Wenn es geändert wird, bedeutet das, dass Sie eine neue Version von etwas haben.

Durch die Aufnahme in das Repository wird sichergestellt, dass alle Entwickler die gleichen Versionen verwenden.

241voto

Fieg Punkte 2946

Für Anträge/Projekte : Eindeutig ja.

En Komponisten-Dokumentation sagt dazu (mit Betonung):

Übertragen Sie die composer.lock Ihrer Anwendung (zusammen mit der composer.json) in die Versionskontrolle.

Wie @meza sagte: Sie sollten die Sperrdatei festschreiben, damit Sie und Ihre Mitarbeiter an denselben Versionen arbeiten und Sie nicht sagen können: "Aber auf meinem Computer hat es funktioniert" ;-)

Für Bibliotheken : Wahrscheinlich nicht.

Die Dokumentation des Komponisten enthält Hinweise zu diesem Thema:

Hinweis: Für Bibliotheken ist es nicht unbedingt empfehlenswert, die Sperrdatei zu übergeben (...)

Und Staaten aquí :

Für Ihre Bibliothek können Sie die Datei composer.lock committen, wenn Sie das möchten. Dies kann Ihrem Team helfen, immer gegen die gleichen Versionen der Abhängigkeiten zu testen. Diese Sperrdatei hat jedoch keine Auswirkungen auf andere Projekte, die von ihr abhängen. Sie wirkt sich nur auf das Hauptprojekt aus.

Für Bibliotheken stimme ich der Antwort von @Josh Johnson zu.

96voto

Josh Johnson Punkte 10013

Nachdem ich einige Projekte in beide Richtungen durchgeführt habe, bin ich der Meinung, dass composer.lock sollten nicht im Rahmen des Projekts gebunden werden.

composer.lock sind Build-Metadaten, die nicht Teil des Projekts sind. Der Zustand der Abhängigkeiten sollte durch die Art und Weise kontrolliert werden, wie Sie sie versionieren (entweder manuell oder als Teil Ihres automatisierten Build-Prozesses) und nicht willkürlich durch den letzten Entwickler, der sie aktualisiert und die Lock-Datei übergeben hat.

Wenn Sie sich Sorgen darüber machen, dass sich Ihre Abhängigkeiten zwischen den Composer-Updates ändern, dann fehlt Ihnen das Vertrauen in Ihr Versionierungsschema. Versionen (1.0, 1.1, 1.2, etc.) sollten unveränderlich sein und Sie sollten "dev-" und "X.*" Platzhalter außerhalb der anfänglichen Feature-Entwicklung vermeiden.

Die Übergabe der Sperrdatei ist ein Rückschritt für Ihr Abhängigkeitsmanagementsystem, da die Abhängigkeitsversion nun wieder implizit definiert ist.

Außerdem sollte Ihr Projekt nie neu erstellt werden müssen oder seine Abhängigkeiten in jeder Umgebung, insbesondere in der prod-Umgebung, neu beschafft werden müssen. Ihr Ergebnis (tar, zip, phar, ein Verzeichnis usw.) sollte unveränderlich sein und ohne Änderungen durch die Umgebungen transportiert werden.

49voto

lebobbi Punkte 2057
  1. Sie sollten Ihre Abhängigkeiten nicht direkt in der Produktion aktualisieren.
  2. Sie sollten die Versionskontrolle Ihrer composer.lock archivo.
  3. Sie sollten Ihre tatsächlichen Abhängigkeiten nicht versionskontrollieren.

1. Sie sollten Ihre Abhängigkeiten nicht direkt in der Produktion aktualisieren weil Sie nicht wissen, wie sich dies auf die Stabilität Ihres Codes auswirken wird. Mit den neuen Abhängigkeiten könnten Fehler eingeführt werden, das Verhalten des Codes könnte sich ändern und Ihren eigenen beeinflussen, er könnte mit anderen Abhängigkeiten inkompatibel sein usw. Sie sollten dies in einer Entwicklungsumgebung tun, gefolgt von angemessenen QA- und Regressionstests usw.

2. Sie sollten eine Versionskontrolle Ihrer composer.lock Datei Denn hier werden Informationen über Ihre Abhängigkeiten und über die Abhängigkeiten Ihrer Abhängigkeiten gespeichert, die es Ihnen ermöglichen, den aktuellen Stand des Codes zu replizieren. Dies ist wichtig, da alle Ihre Tests und Entwicklungen gegen einen bestimmten Code durchgeführt wurden. Wenn Sie sich nicht um die aktuelle Version des Codes kümmern, ist das so, als würden Sie Codeänderungen in Ihre Anwendung hochladen und sie nicht testen. Wenn Sie die Versionen Ihrer Abhängigkeiten aktualisieren, sollten Sie dies freiwillig tun und die notwendige Sorgfalt walten lassen, um sicherzustellen, dass alles noch funktioniert. Der Verlust von ein oder zwei Stunden Betriebszeit durch die Rückkehr zu einer früheren Version kann Sie viel Geld kosten.

Eines der Argumente, die Sie hören werden, dass man die composer.lock ist, dass Sie genau die Version einstellen können, die Sie in Ihrer komponist.json Datei, und dass auf diese Weise jedes Mal, wenn jemand die composer install werden sie mit demselben Code installiert. Das ist nicht wahr, denn Ihre Abhängigkeiten haben ihre eigenen Abhängigkeiten, und ihre Konfiguration könnte in einem Format angegeben werden, das Updates auf Unterversionen oder sogar ganze Versionen erlaubt.

Dies bedeutet, dass selbst wenn Sie angeben, dass Sie Laravel 4.1.31 in Ihrem komponist.json Laravel in seinem komponist.json Datei könnte ihre eigenen Abhängigkeiten haben, die als Symfony event-dispatcher: 2.* benötigt werden. Mit dieser Art von Konfiguration könnten Sie mit Laravel 4.1.31 mit Symfony event-dispatcher 2.4.1 enden, und jemand anderes in Ihrem Team könnte Laravel 4.1.31 mit event-dispatcher 2.6.5 haben, es würde alles davon abhängen, wann Sie das letzte Mal den Composer installiert haben.

Wenn Sie also Ihre composer.lock Datei im Versionssystem wird die genaue Version dieser Unterabhängigkeiten gespeichert, so dass Sie und Ihr Teamkollege eine Composer-Installation durchführen (dies ist die Art und Weise, wie Sie Ihre Abhängigkeiten auf der Grundlage einer composer.lock ) erhalten Sie beide die gleichen Versionen.

Was ist, wenn Sie aktualisieren wollen? Dann führen Sie in Ihrer Entwicklungsumgebung aus: composer update erzeugt dies eine neue composer.lock Datei (wenn es etwas Neues gibt) und nach dem Testen und QA-Test und Regressionstest und so weiter. Sie können es für alle anderen zum Herunterladen der neuen composer.lock da es sicher aufgerüstet werden kann.

3. Sie sollten Ihre tatsächlichen Abhängigkeiten nicht versionskontrollieren weil es keinen Sinn macht. Mit der composer.lock können Sie die genaue Version der Abhängigkeiten installieren und müssen sie nicht festschreiben. Warum sollten Sie 10000 Dateien mit Abhängigkeiten zu Ihrem Projektarchiv hinzufügen, wenn Sie sie nicht aktualisieren sollen. Wenn Sie eine dieser Dateien ändern müssen, sollten Sie sie abspalten und Ihre Änderungen dort vornehmen. Und wenn Sie sich Sorgen darüber machen, dass Sie die tatsächlichen Abhängigkeiten jedes Mal bei einem Build oder Release holen müssen, hat Composer verschiedene Möglichkeiten, dieses Problem zu lindern, Cache, Zip-Dateien, etc.

10voto

waanders Punkte 8557

Sie übertragen dann die composer.json zu Ihrem Projekt hinzufügen und alle anderen Mitglieder Ihres Teams können composer install ausführen, um Ihre Projektabhängigkeiten zu installieren.

Der Sinn der Sperrdatei besteht darin, die genauen Versionen aufzuzeichnen, die installiert sind, damit sie erneut installiert werden können. Das heißt, wenn Sie eine Versionsangabe von 1.* haben und Ihr Kollege composer update ausführt, das 1.2.4 installiert, und dann die Datei composer.lock übergibt, erhalten Sie bei der Installation von composer auch 1.2.4, selbst wenn 1.3.0 veröffentlicht wurde. Dies stellt sicher, dass jeder, der an dem Projekt arbeitet, genau die gleiche Version hat.

Das bedeutet, dass, wenn irgendetwas seit der letzten Composer-Installation geändert wurde, dann, ohne eine Sperrdatei wird neuer Code von Drittanbietern heruntergeladen .

Auch dies ist ein Problem, wenn Sie sich Sorgen machen, dass Ihr Code kaputt geht. Und es ist einer der Gründe, warum es wichtig ist, Composer als um die Datei composer.lock zentriert zu betrachten.

Quelle: Komponist: Alles über die Sperrdatei .


Übertragen Sie die composer.lock Ihrer Anwendung (zusammen mit der composer.json) in die Versionskontrolle. Dies ist wichtig, weil der Installationsbefehl prüft, ob eine Lock-Datei vorhanden ist, und wenn dies der Fall ist, lädt er die dort angegebenen Versionen herunter (unabhängig davon, was in composer.json steht). Das bedeutet, dass jeder, der das Projekt einrichtet, genau die gleiche Version der Abhängigkeiten herunterladen wird. Ihr CI-Server, die Produktionsmaschinen, die anderen Entwickler in Ihrem Team, alles und jeder läuft auf denselben Abhängigkeiten, was die Gefahr von Fehlern, die nur einige Teile der Deployments betreffen, verringert. Selbst wenn Sie allein entwickeln, können Sie sich bei einer Neuinstallation des Projekts in sechs Monaten darauf verlassen, dass die installierten Abhängigkeiten immer noch funktionieren, selbst wenn Ihre Abhängigkeiten seither viele neue Versionen veröffentlicht haben.

Quelle: Composer - Grundlegende Verwendung .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X