1211 Stimmen

Was bedeuten "Branch", "Tag" und "Trunk" in Subversion-Repositories?

Ich habe diese Worte schon oft in Diskussionen über Subversion (und wohl auch allgemein über Repositories) gesehen.
Ich habe mit SVN für meine Projekte verwendet, aber ich habe das Konzept dieser Verzeichnisse nie ganz verstanden.

Was bedeuten sie?

29 Stimmen

Hier ist ein guter Artikel, auf den ich gestoßen bin, der erklärt, wie/wann man Stamm, Zweig und Tags verwendet. Ich hatte vorher noch nie eine Versionsverwaltung benutzt, aber dieser Artikel machte es für einen Anfänger wie mich ziemlich einfach zu verstehen. Alltägliches mit Subversion

927voto

Jon Limjap Punkte 92084

Hmm, ich bin mir nicht sicher, ob ich mit Nick übereinstimme, was die Ähnlichkeit des Tags mit einem Zweig angeht. Ein Tag ist nur eine Markierung

  • Kofferraum wäre der Hauptteil der Entwicklung, der vom Beginn des Projekts bis zur Gegenwart reicht.

  • Zweigstelle wird eine Kopie des Codes sein, die von einem bestimmten Punkt des Stammes abgeleitet ist und für die Anwendung größerer Änderungen am Code verwendet wird, wobei die Integrität des Codes im Stamm erhalten bleibt. Wenn die größeren Änderungen wie geplant funktionieren, werden sie in der Regel wieder in den Stamm eingefügt.

  • Tag ist ein Zeitpunkt auf dem Stamm oder einem Zweig, den Sie erhalten möchten. Die beiden Hauptgründe für die Beibehaltung sind, dass es sich entweder um eine Hauptversion der Software handelt, sei es Alpha, Beta, RC oder RTM, oder dass es sich um den stabilsten Punkt der Software handelt, bevor größere Revisionen auf den Stamm angewendet wurden.

In Open-Source-Projekten können größere Zweige, die von den Projektbeteiligten nicht in den Stamm übernommen werden, als Grundlage für Gabeln -- z.B. völlig getrennte Projekte, die einen gemeinsamen Ursprung mit anderem Quellcode haben.

Die Zweig- und Tag-Teilbäume unterscheiden sich vom Stamm auf folgende Weise:

Mit Subversion können Sysadmins Folgendes erstellen Hook-Skripte die bei bestimmten Ereignissen ausgeführt werden, z. B. beim Übertragen einer Änderung in das Repository. Es ist für eine typische Subversion-Repository-Implementierung sehr üblich, jeden Pfad, der "/tag/" enthält, nach der Erstellung als schreibgeschützt zu behandeln; das Ergebnis ist, dass einmal erstellte Tags unveränderlich sind (zumindest für "normale" Benutzer). Dies geschieht über die Hook-Skripte, die die Unveränderbarkeit erzwingen, indem sie weitere Änderungen verhindern, wenn Tag ist ein übergeordneter Knoten des geänderten Objekts.

Subversion hat seit Version 1.5 auch Funktionen für die "Verfolgung der Zusammenführung von Zweigen" hinzugefügt, so dass Änderungen, die an einen Zweigstelle kann mit Unterstützung für inkrementelles, "intelligentes" Zusammenführen wieder in den Stamm eingefügt werden.

97voto

grom Punkte 15234

Zusätzlich zu dem, was Nick gesagt hat, finden Sie weitere Informationen unter Gestreamte Zeilen: Verzweigungsmuster für die parallele Softwareentwicklung

enter image description here

In dieser Abbildung main ist der Rumpf, rel1-maint ist eine Verzweigung und 1.0 ist ein Tag.

76voto

VonC Punkte 1117238

Im Allgemeinen (werkzeugunabhängige Sichtweise) ist ein Zweig der Mechanismus, der für die parallele Entwicklung verwendet wird. Ein SCM kann zwischen 0 und n Zweigen haben. Subversion hat 0.

  • Kofferraum ist ein Hauptzweig empfohlen von Subversion aber Sie sind keineswegs gezwungen, sie zu erstellen. Sie können es "main" oder "releases" nennen, oder gar keins haben!

  • Zweigstelle stellt einen Entwicklungsaufwand dar. Sie sollte nie nach einer Ressource benannt werden (wie 'vonc_branch'), sondern nach:

    • a Zweck 'myProject_dev' oder 'myProject_Merge'
    • einen Versionsumfang 'myProjetc1.0_dev'oder myProject2.3_Merge' oder 'myProject6..2_Patch1'...
  • Tag ist ein Schnappschuss von Dateien, um leicht zu diesem Zustand zurückkehren zu können. Das Problem ist, dass Tag und Branch in Subversion dasselbe sind . Und ich würde auf jeden Fall den paranoiden Ansatz empfehlen:

    können Sie eines der mit Subversion gelieferten Zugriffskontrollskripte verwenden, um zu verhindern, dass jemand etwas anderes tut, als neue Kopien im Tags-Bereich zu erstellen.

Eine Markierung ist endgültig. Sein Inhalt sollte sich nie ändern. NIEMALS. Niemals. Sie haben eine Zeile in der Freigabemitteilung vergessen? Erstellen Sie ein neues Tag. Obsolet oder entfernen Sie das alte.

Ich habe viel darüber gelesen, dass man "solche und solche Dinge in solche und solche Zweige und dann schließlich in den Stammzweig zurückführen" soll. Das nennt man Workflow zusammenführen und es gibt hier ist nichts vorgeschrieben . Nur weil Sie einen Stammzweig haben, heißt das nicht, dass Sie müssen wieder zusammengeführt werden alles.

Konventionell kann der Stammzweig den aktuellen Stand der Entwicklung repräsentieren, aber das gilt nur für ein einfaches sequentielles Projekt, d.h. ein Projekt, das bereits existiert:

  • keine "Vorab"-Entwicklung (für die Vorbereitung der nächstfolgenden Version, die solche Änderungen impliziert, dass sie nicht mit der aktuellen "Stamm"-Entwicklung kompatibel sind)
  • kein massives Refactoring (zum Testen einer neuen technischen Wahl)
  • keine langfristige Pflege einer früheren Version

Denn mit einem (oder allen) dieser Szenarien erhalten Sie vier "Stämme", vier "aktuelle Entwicklungen", und nicht alles, was Sie in diesen parallelen Entwicklungen tun, muss zwangsläufig in den "Stamm" zurückgeführt werden.

39voto

Nick Berardi Punkte 53415

In SVN sind ein Tag und ein Zweig sehr ähnlich.

Tag \= ein definierter Zeitabschnitt, in der Regel für Veröffentlichungen verwendet

Zweigstelle \= auch eine definierte Zeitspanne, in der die Entwicklung fortgesetzt werden kann, in der Regel für Hauptversionen wie 1.0, 1.5, 2.0 usw., bei der Veröffentlichung wird der Zweig markiert. Dies ermöglicht es Ihnen, eine Produktionsversion weiterhin zu unterstützen, während Sie mit den Änderungen im Stamm fortfahren.

Kofferraum \= Arbeitsbereich für die Entwicklung, in dem die gesamte Entwicklung stattfinden sollte und in den die Änderungen aus den Zweigversionen zurückgeführt werden.

33voto

Eric Z Beard Punkte 36325

Sie haben eigentlich keine formale Bedeutung. Ein Ordner ist ein Ordner für SVN. Sie sind ein allgemein akzeptierter Weg, um Ihr Projekt zu organisieren.

  • Der Stamm ist der Ort, an dem Sie Ihre Hauptentwicklungslinie aufbewahren. Der Zweigordner ist der Ort, an dem Sie, nun ja, Zweige erstellen können, was in einem kurzen Beitrag schwer zu erklären ist.

  • Ein Zweig ist eine Kopie einer Teilmenge Ihres Projekts, an der Sie getrennt vom Stamm arbeiten. Vielleicht ist es für Experimente, die nirgendwo hinführen, oder vielleicht ist es für die nächste Version, die Sie später wieder in den Stamm zusammenführen, wenn sie stabil wird.

  • Und der tags-Ordner ist für die Erstellung von getaggten Kopien Ihres Repositorys gedacht, in der Regel zu Release-Checkpoints.

Aber wie ich schon sagte, für SVN ist ein Ordner ein Ordner. branch , trunk und Tag sind nur eine Konvention.

Ich verwende das Wort 'Kopie' sehr großzügig. SVN erstellt eigentlich keine vollständigen Kopien von Dingen im Repository.

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