9 Stimmen

Wie man Subversion-Externa aktualisiert

Wir haben mehrere Subversion-Repositories: eines für den allgemeinen Code und eines für jedes Projekt der obersten Ebene. Die Projekte der obersten Ebene haben einen svn:external-Link zum Stamm des gemeinsamen Repositorys.

Bevor wir eine neue Version eines Projekts erstellen, legen wir einen Zweig des übergeordneten Projekts und einen parallelen Zweig im gemeinsamen Repository an.

Wie können wir automatisch sicherstellen, dass die Eigenschaft svn:external im verzweigten Projekt der obersten Ebene auf den parallelen Zweig im gemeinsamen Verzeichnis verweist - derzeit verweist sie auf "trunk" im gemeinsamen Repository. Wir müssen dies derzeit manuell im verzweigten Projekt bearbeiten.

Danke

8voto

David W. Punkte 101611

Wenn ich Sie richtig verstehe, wollen Sie sicherstellen, dass foo y bar teilen sich den gleichen Zweig. foo ist Ihr Masterprojekt und hat eine svn:externals darauf, die irgendwo auf bar . Wenn Sie verzweigen foo möchten Sie sicherstellen, dass bar denselben Zweig verwendet. Die einzige Möglichkeit, dies sicherzustellen, ist die Erstellung des Repositorys mit der Option tags y branches Verzeichnisse im Stammverzeichnis Ihres Repositorys statt im Stammverzeichnis des Projekts (wie es die meisten Sites tun).

Dann können Sie relative externe Referenzen verwenden, um von der foo Verzeichnis, das die svn:external zurück zu bar . Wenn Sie außerdem foo und bar mit demselben Tag markieren, behalten foo und bar ihre Beziehung bei:

$ svn propset svn:externals ../../bar common

Wenn sich Ihre Zweige im Wurzelverzeichnis Ihres Repositorys befinden, dann wird die common Verzeichnis auf denselben Zweig verweist wie bei foo wie bei bar .

Das große Problem mit snv:externals ist, dass Sie, wenn Sie nicht aufpassen, auf eine sich ständig ändernde Version des Verzeichnisses verweisen, auf das Sie verlinken. Nehmen wir an, jemand hat dies getan:

$ svn propset svn:externals /projects/bar/trunk common

in meinem foo Projekt. Ich mache eine Freigabe und kopiere foo zu einem Tag. Allerdings ist die common Verzeichnis, das ich markiert habe, wird geändert, wenn jemand die bar/trunk . Dies macht den Wiederaufbau fast unmöglich foo .

Wenn ich die svn:externals stelle ich immer sicher, dass ich entweder auf eine getaggte Version von bar oder eine bestimmte Revision, und wenn ich auf eine bestimmte Revision verlinke, verweise ich auch mit meiner URL auf diese Revision, für den Fall, dass jemand beschließt, das Verzeichnis, auf das ich verlinke, zu löschen. svn:externals Eigentum.

Es gibt nichts in Subversion, das automatisch Ihre svn:externals Eigenschaften, aber Sie können nach allen svn:externals in einem Verzeichnisbaum suchen, indem Sie

$svn propget -v -R svn:externals .

Ich habe festgestellt, dass svn:externals ist in der Regel lästiger als es wert ist.

Stattdessen speichere ich einfach das erstellte Objekt von bar oder eine gezippte Kopie des Quelltextes in meinem Release-Repository, und als Teil meiner Build-Prozedur kopiere ich das Objekt oder den gezippten Quelltext aus meinem Release-Repository.

Ich verwende Maven-Site-Repositories wie Nexus oder Artifactory als mein Release-Repository, auch wenn ich kein Maven-Projekt durchführe oder sogar an einem Java-basierten Projekt arbeite. Das lokale Maven-Repository bietet alle Werkzeuge, die Sie zum Hoch- und Herunterladen Ihrer abhängigen Pakete benötigen, und Maven verfügt über das Konzept der freigeben Repository - wo sich der Code nie ändert - und ein Schnappschuss Repository, in dem Sie planen, den Code zu veröffentlichen, aber das kann sich ändern. Dies ist hilfreich, wenn Sie vermuten, dass bar könnte sich ändern, weil Sie etwas brauchen in foo .

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