SVN: Beste Weg, um gemeinsamen code zwischen Projekten
Ich habe mehrere website-Projekte in einem einzigen repository von denen jede eine Kopie von WordPress. Die Aktualisierung von WordPress bedeutet, dass die Aktualisierung alle Projekt-Ordner und halten redundante Kopien. Dies ist nützlich für mein rsync-Skripte, die synchronisieren den gesamten Ordner. Es gibt mir auch voll arbeiten lokale Kopien der site.
Gibt es eine Reihe von Möglichkeiten, die ich sehen kann, zu verbessern und würde gerne etwas feedback. Ich bin auf Windows und vor kurzem migriert, um Subversion.
- Erstellen Sie symbolische links auf die WordPress-bits in den jeweiligen website-Ordner. Wird diese gedrückt halten, bis in Subversion und Apache. Irgendwelche Nachteile?
- Eine einzelne WordPress-Ordner, und verzweigen Sie in andere website trunks. Ich habe gelesen, dass Zweige sind Billig und ein einziges Exemplar ist erhalten, aber ich bin nicht sicher, ob die Verzweigung sollte gemacht über trunks. Ich persönlich glaube, dass dies der beste Ansatz. Gibt es einen Grund, dies zu vermeiden?
- Schließlich, ich könnte halten Sie die derzeitige Struktur und ein Skript verwenden, um Kopien für alle website-Ordner.
Was ist der beste Ansatz, und gibt es irgendwelche alternativen Lösungen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre eine option zu trennen Sie die WordPress-bits in einem separaten repository (da es nicht wirklich ein Teil Ihrer Projekte, es ist einfach etwas, das Sie verwenden, Sie zu bauen), und verwenden Sie anschließend svn:externals zu Holen, die in Ihre Projekte in den richtigen stellen.
Externals-Definitionen in der SVN-Buch
Wenn Sie bereits hosting alle Seiten zusammen in einem repository svn:externals können verwendet werden, um ziehen verschiedene Teile des gleichen repository zusammen in verschiedener Weise.
E. g. mit einem repository wie
Können Sie sich vorstellen ein "svn:externals" - Eigenschaft auf der site1 und site2 dirs, der sagt "commonPieces url-to-repo/commonPieces".
Werden Sie wollen vermeiden, dass jede Rekursion Schleifen hier offensichtlich. Aber das hat den Vorteil, dass alles in der gleichen repository und teilen können, die Geschichte -- die man ziehen kann, Dinge, die immer häufiger von site1 oder site2 in commonPieces mit "svn copy".
Vergleichen Sie unsere aktuelle Lösung, wo ich arbeite, -- migrieren von Sachen von unserer separate Projekt-repositories in einem einzigen auch separate "coreLibraries" repository verliert der Entwicklung der Geschichte. Da wir Häufig entwickeln features für ein Projekt und entscheiden Sie dann, wieder verwenden Sie, dieser Verlust der Geschichte passiert eine Menge...
Edit: es lohnt sich zu erinnern, dass, während "svn update" auf site1 wird automatisch aktualisiert, commonPieces mit diesem "svn:externals" - Eigenschaft, wird ein "svn commit" auf site1 wird nicht angezeigt, die Dinge haben sich geändert in site1/commonPieces. Sie müssen zwei separate verpflichtet, eine von standort1 und eine aus site1/commonPieces.
Könnte man hinzufügen, eine svn:external definition verweist auf die WordPress-repository oder machen Sie Ihre eigenen "customized WordPress-Repository" mit den plugins und Anpassungen, die Sie verwenden.
Oft passiert es mir möglich die gleichen Klassenbibliotheken für unterschiedliche Projekte und in meinem Fall habe ich lieber eine separate - eingefroren - Kopie für jedes Projekt. Der einzige Grund dafür ist, dass ich nicht wollen, zu brechen Projekte, die ich habe nicht für eine Weile gearbeitet, falls einer der Bibliotheken outdates es. Allerdings, wenn jedes Projekt ist ein Teil einer Art von Projekt Sie arbeiten ständig an ist es anders.
Vielleicht bin ich auch nur mit Subversion der falsche Weg, aber unsere Ordner-Struktur sieht wie folgt
Stamm
- Kern
- Messaging
- Super Leistungsstarke Anwendung #1
- Super Leistungsstarke Anwendung #2
- Super Leistungsstarke Anwendung #3
So dass alle unsere Anwendungen teilen die gleichen Kern-und Messaging-Komponenten. Der einzige Nachteil ist, dass, wenn die Menschen Zweig, bekommen Sie all die Anwendungen, aber das ist mehr ein ärgernis als alles andere.
Einen besseren Weg, dies zu tun ist, ziehen Sie wordpress in einem separaten Zweig des Repositorys. Dann bringt eine config Datei, um alle Ihre websites, speichert den Pfad zu WordPress. Sie können den anfügen, diese Position in den php-include-Pfad. Hier ist ein Diagramm:
Dies hat ein paar Vorteile:
Traditionell alles, was getrennt werden soll, auf SVN. Es klingt wie Sie sind mit SVN als ein Mittel zu greifen, code aus unterschiedlichen Bereichen und Nähen Sie zusammen.
Also bist du mit SVN als build-tool. Es ist besser, zu :
Nicht zu gehen off-topic, aber ich schlage vor, Sie nehmen einen harten Blick auf git. Wir tun, diese Art der Sache, die Tag ein, Tag aus mit Submodule, und es ist ein Kinderspiel.
FYI - Migration von SVN über 2 Jahren durch diese Art von Problemen.