Gemeinsam genutzte Komponenten in allen Projekten ist es eine bessere Alternative als svn: externals?

StackOverflow https://stackoverflow.com/questions/249085

  •  05-07-2019
  •  | 
  •  

Frage

Meine Situation: Ich habe mehrere Komponenten haben, die manchmal Änderungen an ihnen haben, und sind auf eine Vielzahl von verschiedenen Projekten gemeinsam genutzt. Jedes Projekt stellt diese in einem Unterordner namens / abhängt. Das hängt hält ein Bündel von SVN Äußerlichkeiten für alle unsere gemeinsamen Komponenten.

svn: externals macht mir viel Zeit und Schmerz

.
  • Show log auf den Ordner Projektstamm wird nicht angezeigt Änderungen für svn: externe Ordner (noch lustig genug begehen und Update mit SVN funktioniert: externals)
  • Wenn Sie Zweig, die svn:. Äußerlichkeiten sind nicht verzweigt
  • Durch keine Verzweigung auf Svn. Äußerlichkeiten, eine Änderung in der Regel den Stamm bricht
  • Stichworte nicht einfrieren ihre Äußerlichkeiten. Diese Niederlagen wirklich den Zweck des Tagging.

Beachten Sie, dass ich mehrere Projekte (die 10 Lassen Sie sagen, für diese Diskussion jeweils die gleichen Äußerlichkeiten verwenden), so normal engagierte Verzeichnisse für jedes Projekt halten würde mir viel verschmelzenden Zeit kosten.

Gibt es eine bessere Alternative für meine Situation?

War es hilfreich?

Lösung

Ich glaube, einen Teil des Problems ist, dass die Release-Zyklen für die gemeinsam genutzten Komponenten nicht unbedingt die Release-Zyklen für die Projekte entsprechen.

Gemeinsame Komponenten wie hier beschrieben hat ihren eigenen Release-Zyklus . Mit anderen Worten könnte jeder ein als separates Projekt (oder vielleicht die Sammlung von ihnen als separates Projekt verwaltet) mit einem Release / Versionsnummer für sich.

verwaltet werden

Beachten Sie, dass die svn:externals Definition können, umfassen eine bestimmte Revision .

Auf diese Weise kann die einzelne Projekte, die Verwendung einer gemeinsam genutzten Komponente entwickelt wird gegen eine spezielle Version / Revision diese gemeinsam genutzte Komponente (oder die Sammlung von gemeinsam genutzten Komponenten), einen stabilen Satz macht von Abhängigkeiten für das Projekt. Änderungen an die Komponenten werden die Projekte nicht brechen, weil jedes Projekt zu einer bestimmten Revision der Komponenten suchen, die nicht unbedingt die HEAD auf der trunk sind.

Während dies wie mehr Arbeit vorne scheinen mag, glaube ich, auf langer Sicht diese Praxis für diese Art von Situation eines besseren Change Management-Prozess zur Verfügung stellt.

Andere Tipps

Ich bin mit @Ken.

Ich habe sehr stark empfehlen gegen mit svn:externals überhaupt ohne eine bestimmte Revision. Ohne eine Revision ist es unmöglich alte Kassen neu zu erstellen. Wenn Sie nur Ihre Externen PIN ein, wenn Tagging, werden Sie nur in der Lage sein, neu zu erstellen, was Sie mit Tags versehen haben. Wenn Sie einige Zwischenrevision im Kofferraum neu erstellen möchten, sind Sie auf eigene Faust.

Ein Grund für nicht Äußerlichkeiten Verzweigung ist, dass es nicht klar ist, wie das getan werden soll. Wenn Ihr Externen in Projekt A Punkte tags / 2.0.0 und Sie erstellen einen 3.4.x Zweig für Ihr Projekt, was sollte das externe Projekt Ein Punkt? Sollte auch eine Niederlassung projizieren? Wenn ja, auf welche Version?

Wenn die Projekte unterschiedliche Release-Zyklen haben, ist es in der Regel unmöglich, ein vernünftiges Verhalten für Äußerlichkeiten zu definieren, wenn Verzweigung.

(Sie vielleicht einen Blick auf die svncopy.pl Skript nehmen möchten, wenn Sie nicht bereits haben (in der Subversion Source-Distribution enthalten), die Sie Äußerlichkeiten an Pin während Tagging. Erlaubt)

Wir haben festgestellt, dass svn: externals sehr schlecht arbeiten, wenn sie zusammen eine Reihe von Komponenten, um Sie aktiv an der Entwicklung sind. Externes arbeitet schön in externen Komponenten zu bringen, die nicht sehr viel bewegen sich, und wo man das Problem nicht die Verzweigung.

Ich erklärte dies auf einem ähnlichen Frage: Sie sollten svn:externals als externe Referenzen aus verschiedenen Repositories verwenden. So sollte svn:externals auf Komponenten beziehen, Module, 3rd-Party-Tools, etc., die in unterschiedlichen Repositories befinden.

Sie sollten nicht Verwendung svn:externals einen „symbolischer Link“ -verhalten zu emulieren, indem Externen mit in die gleiche Repository zu zeigen.

können Sie solche Probleme die meiste Zeit lösen, indem Sie Ihre Build-Struktur zu modifizieren, oder verwenden Sie checkout-Skripte und spärliche Kasse Funktion.

svn: externals haben eine Menge Probleme die meisten von ihnen sind schwer zu sehen, zu verfolgen und Reparatur: ein Beispiel hier

siehe
  • Commits nicht über Äußerlichkeiten (keine atomaren Commits)
  • umspannen
  • Zweige nicht ihre Äußerlichkeiten verzweigen
  • Tags nicht „einfrieren“ ihre Äußerlichkeiten so letztere baut in verschiedenen führen kann / gebrochene baut
  • Zusammenführung und reeintegrate merge auf Äußerlichkeiten nicht funktionieren

Wenn Sie Externen verwenden, um andere Repositorys zu verweisen, werden Sie die meiste Zeit haben diese Probleme nicht.

Sie könnten versuchen, die so genannten Herstellerzweige mit:

http://svnbook.red -bean.com/en/1.5/svn-book.html#svn.advanced.vendorbr

Es ist eine nützliche Strategie, wenn Sie mit Bibliotheken von Drittanbietern umgehen, aber es kann auch in einer Situation wie bei Ihnen nützlich sein.

svncopy.pl (erwähnt in diese Frage ) wird die Pfade in der svn:externals an ihren neuen Standort in der Branche neu zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top