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
.