2009-10-08 11 views
5

Ich bin auf der Suche nach Svn Externals für meine Firma, und es scheint, als wäre es eine gute Funktion für uns zu verwenden. Wir haben einige Produkte, die häufig auf gemeinsame Komponenten verweisen, aber die schlechte Angewohnheit haben, in ältere Versionen und manchmal sogar in unterschiedlich verzweigte Codebasen zurückzufallen.Hilfe zum Verständnis SVN Externals

Ich habe ein ordentliches Stück darüber gelesen, wie sie jetzt arbeiten, und ich denke, ich verstehe das Konzept OK. Was ich nicht 100% ig sicher bin, ist, wie verschiedene Revisionen von mehreren Repositories miteinander verknüpft sind.

Sagen wir, ich habe ein Produkt und eine Bibliothek. Das Produkt wird für die Bibliothek erstellt, daher verfügt das Repo über eine svn: externals-Eigenschaft, die mit der Bibliotheksquelle verknüpft ist. In Ermangelung einer bestimmten Version in der Definition von svn: externals, wenn ich HEAD of Product auschecke, bekomme ich auch HEAD of Library.

Ich habe im Laufe der Jahre mehrere Versionen des Produkts erstellt, wobei jedes Mal auf die neueste Version von Library verwiesen wurde. Eines Tages muss ich jedoch zurückgehen und Produktversion 1 ausprobieren, indem ich manuell die richtige Version auswähle. Wenn ich das tue, welche Version der Bibliothek bekomme ich, HEAD oder die Revision, die ich beim ersten Mal benutzt habe?

Hoffentlich war ich ein guter Entwickler und erinnerte daran, jede Version des Produkts, die ich veröffentliche, zu markieren. Wenn ich mein Tag 'Product-1-0-0' auf das Repository anwende, wird auch die korrekte Revision des Library-Repositorys markiert? Wenn ich später das Produkt anhand des Tags "Product-1-0-0" auschecke, wird die korrekte Revision der Library damit ausgecheckt?

Antwort

6

Worauf Sie achten müssen mit svn:externals ist, dass Sie die Revision explizit angeben müssen, wenn Sie etwas anderes als trunk wollen. Google "pinning svn:externals" für die Details. Wenn Sie eine ziemlich moderne Version, 1.5 oder neuer IIRC, verwenden, werden relative externe zumindest unterstützt. Ältere Versionen, wie die, die ich derzeit verwende, erfordern, dass wir die Revision explizit mit der -rNNNNN Option auf der svn:externals Eigenschaft für jeden verdammten Ordner anheften.

Wir verwendeten eine Modifikation eines Perl-Skripts mit dem Namen svncopy.pl von tigris.org, um all unsere Verzweigungen und Markierungen durchzuführen. Es ist nicht so schlimm, aber ich wünschte, wir hätten gewusst, wie viel Arbeit es war, bevor wir beschlossen, sie so stark zu benutzen.

+0

Für svn: externals sollten Sie fast immer Ihre Umdrehungen festlegen. Andernfalls, wenn Sie etwas in der extern referenzierten Sache ändern, können Sie Ihr Projekt nicht in den vorherigen Zustand zurückversetzen. Außerdem riskierst du Sachen zu zerbrechen, ohne es zu wissen. Siehe http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-externals.html, "Verwenden Sie explizite Revisionsnummern". –

5

Sie können date specifiers verwenden, um sicherzustellen, dass Sie beim Aktualisieren entsprechende Revisionen erhalten.

Wir haben es für ein Tool, das PC-Lint läuft; Wir machen es gerne bei jeder Revision, damit wir die Ergebnisse vergleichen können.

Es ist ein bisschen widerlich bei der Umsetzung - wir:

  • bestimmen, was die Arbeitskopie rev an ist (mit svnversion)
  • bestimmen, was der HEAD rev an ist (mit svn info)
  • nimm die Zeitstempel für alle Revisionen bis einschließlich Kopf (mit svn log)
  • stoße die Zeitstempel um .999 Sekunden, um "sicher" zu sein, wir bekommen den rev (yay magic!)
  • Update auf jede Revision (mit svn update -r {sometimestamp})
  • laufen PC-Lint auf der Arbeitskopie, diff, Mailout, Trigger klaxons, was auch immer

(Komplexität von Rube Goldberg verdient, ist es nicht? Upvotes und unsterbliche Dankbarkeit für alle, die eine bessere Lösung vorschlagen können.)

Sie könnten auch interessiert sein in der Svn Buch Abschnitt auf Peg and Operative Revisions, die ich gerade entdeckt habe - dies scheint eine relativ neue Ergänzung.

1

Ja, vorausgesetzt, Sie geben eine explizite Revisionsnummer in Ihren externen Daten an, wie in der docs vorgeschlagen. Andernfalls wird die HEAD-Revision der referenzierten Externals verwendet.

Achten Sie nur auf Datei basierte svn: externals in 1.6. Sie sehen sehr nützlich, aber ich traf nur this bug heute :(

2

Sie auf Abhängigkeits Manager lesen sollte -. Ich bin nicht sicher, was Ihre Plattform ist, aber Efeu und Maven lösen dieses Problem in einer viel sauberer Weise

svn: schön Äußerlichkeiten sind nicht in Subversion versioniert, wenn jemand die Revision oder Tag eines Ihrer Äußerlichkeiten verändert haben Sie keine Möglichkeit zu wissen, was es vor der Änderung war

Verwandte Themen