Wenn Sie mehrere Projekte haben, die nichts miteinander zu tun haben, ist es eine gute Idee, sie im selben Repository abzulegen?
myRepo/projectA/trunk
myRepo/projectA/tags
myRepo/projectA/branches
myRepo/projectB/trunk
myRepo/projectB/tags
myRepo/projectB/branches
oder würden Sie für jedes neue Repositorys erstellen?
myRepoA/trunk
myRepoA/tags
myRepoA/branches
myRepoB/trunk
myRepoB/tags
myRepoB/branches
Was sind die Vor- und Nachteile von jedem? Alles, woran ich derzeit denken kann, ist, dass Sie gemischte Revisionsnummern erhalten (na und?), Die Sie nur verwenden können, svn:externals
wenn das Repository tatsächlich extern ist. (Meiner Ansicht nach?)
Der Grund, den ich frage, ist, dass ich erwäge, meine mehreren Repos zu einem zusammenzufassen, da mein SVN-Host damit begonnen hat, pro Repo Gebühren zu erheben.
Antworten:
Das Einzel- oder Mehrfachproblem hängt von den persönlichen oder organisatorischen Vorlieben ab.
Die Verwaltung von Multiple vs. Single hängt hauptsächlich von der Zugriffskontrolle und Wartung ab.
Die Zugriffssteuerung für ein einzelnes Repository kann in einer einzelnen Datei enthalten sein. Für mehrere Repositorys sind möglicherweise mehrere Dateien erforderlich. Die Wartung weist ähnliche Probleme auf - eine große Sicherung oder viele kleine Sicherungen.
Ich verwalte meine eigenen. Es gibt ein Repository, mehrere Projekte mit jeweils eigenen Tags, Trunk und Zweigen. Wenn einer zu groß wird oder ich den Code eines Kunden für seinen Komfort physisch isolieren muss, kann ich schnell und einfach ein neues Repository erstellen.
Ich habe mich kürzlich mit einer relativ großen Firma über die Migration mehrerer Quellcodeverwaltungssysteme zu Subversion beraten. Sie haben ~ 50 Projekte, von sehr kleinen bis hin zu Unternehmensanwendungen und ihrer Unternehmenswebsite. Ihr Plan? Beginnen Sie mit einem einzelnen Repository und migrieren Sie bei Bedarf zu mehreren. Die Migration ist fast abgeschlossen und sie befinden sich immer noch in einem einzigen Repository. Es wurden keine Beschwerden oder Probleme gemeldet, da es sich um ein einziges Repository handelt.
Dies ist kein binäres Schwarz-Weiß-Problem.
Tun Sie, was für Sie funktioniert - wäre ich in Ihrer Position, würde ich Projekte so schnell wie möglich in einem einzigen Repository zusammenfassen, da die Kosten in meinem (sehr, sehr kleinen) Unternehmen eine wichtige Rolle spielen würden.
JFTR:
Revisionsnummern in Subversion haben außerhalb des Repositorys wirklich keine Bedeutung. Wenn Sie für eine Revision aussagekräftige Namen benötigen, erstellen Sie eine TAG
Commit-Nachrichten lassen sich leicht nach Pfaden im Repository filtern. Daher ist es eine triviale Aufgabe, nur die Nachrichten zu lesen, die sich auf ein bestimmtes Projekt beziehen.
Bearbeiten: Weitere Informationen zur Verwendung einer einzelnen Autorisierungs- / Authentifizierungskonfiguration für SVN finden Sie in der Antwort von Blade .
quelle
Für Ihren speziellen Fall ist ein (1) Repository perfekt. Sie sparen viel Geld. Ich ermutige die Leute immer, ein einziges Repository zu verwenden. Weil es einem einzelnen Dateisystem ähnlich ist: Es ist einfacher
Es gibt einen einzigen Punkt für mehrere Repositorys: Die Verwaltung großer Repos ist unangenehm. Das Dumping / Laden großer Repos nimmt viel Zeit in Anspruch. Aber da Sie keine Verwaltung durchführen, denke ich, dass es nicht Ihr Anliegen sein wird;)
SVN lässt sich sehr gut mit größeren Repositorys skalieren. Selbst bei großen Repositorys (> 100 GB) gibt es keine Verlangsamung.
So haben Sie weniger Probleme mit einem einzigen Repository. Aber Sie sollten wirklich über das Repo-Layout nachdenken!
quelle
Ich würde mehrere Repositorys verwenden. Zusätzlich zum Benutzerzugriffsproblem erleichtert es auch das Sichern und Wiederherstellen. Und wenn Sie sich in einer Position befinden, in der jemand Sie für Ihren Code (und dessen Verlauf) bezahlen möchte, ist es einfacher, ihm nur einen Repository-Speicherauszug zu geben.
Ich würde vorschlagen, dass die Konsolidierung von Repositorys nur aufgrund der Gebührenrichtlinien Ihres Hosting-Anbieters kein sehr guter Grund ist.
quelle
Wir verwenden ein einziges Repository. Mein einziges Anliegen war die Skalierung, aber nachdem ich das ASF-Repository (700.000 Revisionen und Zählung) gesehen hatte, war ich ziemlich überzeugt, dass die Leistung kein Problem darstellen würde.
Unsere Projekte sind alle verwandte, unterschiedliche ineinandergreifende Module, die eine Reihe von Abhängigkeiten für eine bestimmte App bilden. Aus diesem Grund ist ein einziges Repository ideal. Möglicherweise möchten Sie für jedes Projekt separate Trunk / Zweige / Tags, können jedoch innerhalb einer einzigen Revision atomar eine Änderung in Ihrer gesamten Codebasis festschreiben. Dies ist fantastisch für das Refactoring.
quelle
Beachten Sie, dass viele SVN-Repos bei Ihrer Entscheidung dieselbe Konfigurationsdatei verwenden können.
Beispiel (aus dem obigen Link):
In der Schale:
Datei: /var/svn/repos1/conf/svnserve.conf
Datei: / var / svn / conf / authz
quelle
Ich würde separate Repositorys erstellen ... Warum? Die Revisionsnummern und Commit-Meldungen machen einfach keinen Sinn, wenn Sie viele unabhängige Projekte in nur einem Repository haben. Kurzfristig wird es mit Sicherheit ein großes Durcheinander sein.
quelle
Wir sind ein kleines Softwareunternehmen und verwenden für unsere gesamte Entwicklung ein einziges Repo. Der Baum sieht so aus:
Die Idee war, dass wir Kunden und interne Arbeit im selben Repo haben würden, aber am Ende hatten wir unser Unternehmen als "Kunden" für sich.
Dies hat bei uns sehr gut funktioniert und wir verwenden Trac als Schnittstelle. Die Revisionsnummern beziehen sich auf das gesamte Repo und sind nicht projektspezifisch, aber das bringt uns nicht in Phase.
quelle
Persönlich würde ich für jedes neue Repositorys erstellen. Dies vereinfacht den Auscheckvorgang erheblich und erleichtert die Verwaltung insgesamt, zumindest im Hinblick auf den Benutzerzugriff und die Sicherungen. Außerdem wird das Problem der globalen Versionsnummer vermieden, sodass die Versionsnummer für alle Projekte von Bedeutung ist.
Wirklich aber, du solltest nur git benutzen;)
quelle
Eine weitere zu berücksichtigende Sache ist die Tatsache, dass die Verwendung mehrerer Repositorys dazu führt, dass Sie die Möglichkeit einer einheitlichen Protokollierung verlieren (Befehl svn log). Dies allein ist ein guter Grund für die Auswahl eines einzelnen Repositorys.
Ich benutze TortuiseSvn und habe festgestellt, dass die Option "Protokoll anzeigen" ein obligatorisches Tool ist. Obwohl Ihre Projekte nichts miteinander zu tun haben, werden Sie sicher feststellen, dass eine zentralisierte globale projektübergreifende Information (Pfade, Fehler-IDs, Nachrichten usw.) immer nützlich ist.
quelle
Wenn Sie ein Tool wie trac planen oder verwenden, das in SVN integriert ist, ist es sinnvoller, ein Repo pro Projekt zu verwenden.
quelle
Ähnlich wie bei Blades Vorschlag zum Freigeben von Dateien ist hier eine etwas einfachere und dennoch weniger flexible Lösung. Ich richte unsere so ein:
In "bin" behalte ich ein Skript namens svn-create.sh, das die gesamte Einrichtungsarbeit zum Erstellen eines leeren Repositorys erledigt. Ich behalte dort auch das Backup-Skript.
In "repository_files" behalte ich allgemeine "conf" - und "hooks" -Verzeichnisse, zu denen alle Repositorys sym-Links haben. Dann gibt es nur einen Satz von Dateien. Dies verhindert jedoch den granularen Zugriff pro Projekt, ohne die Links zu unterbrechen. Das war kein Problem, wo ich das eingerichtet habe.
Zuletzt halte ich das Hauptverzeichnis / var / svn unter Quellcodeverwaltung und ignoriere alles in svnroot. Auf diese Weise unterliegen auch die Repository-Dateien und -Skripte der Quellcodeverwaltung.
quelle
Ähnlich wie bei Mlambie, ein einzelnes Repo zu verwenden, ging die Ordnerstruktur jedoch etwas weiter, um einfach auf bestimmte Projekttypen zu zoomen - Web-HTML-basierte Projekte vs. CS (C #) vs. SQL (SQL-Skripte zum Erstellen / Ausführen) vs. XYZ ( Domain-spezifische Sprachen wie afl (AmiBroker Formula Language) oder ts (TradeStation)):
Beachten Sie, dass ich Trunk in Zweigen habe, da ich ihn als Standardzweig behandle. Manchmal ist der einzige Schmerz, wenn Sie schnell ein anderes Projekt erstellen möchten, müssen Sie die Struktur ProjectName / branch | tags erstellen. Ich verwende App-Einstellungen einfach als Ort, um bestimmte Apps-Einstellungsdateien im Repo so einfach für andere gemeinsam nutzbar zu machen (und ersetze ClientName durch VendorName und ProjectName durch AppName in dieser Ordnerstruktur; und die Zweige | -Tags können nützlich sein, um Einstellungen für verschiedene Hauptfächer zu kennzeichnen auch Versionen von Herstellerprodukten).
Willkommen zu allen Kommentaren zu meiner Struktur - ich habe sie kürzlich geändert und bin bisher ziemlich glücklich, finde es aber manchmal mühsam, Branch | Tags-Strukturen pro Projekt zu pflegen - insbesondere, wenn es sich bei dem Projekt lediglich um ein Projekt handelt, das einfach zum Unit-Test eines anderen Projekts eingerichtet wurde.
quelle
Mein Vorschlag ist einer. Wenn Sie nicht unterschiedliche Benutzer haben, die auf jeden zugreifen, würde ich sagen, verwenden Sie mehrere.
Aber auch das ist kein guter Grund, mehrere zu verwenden.
quelle