Wie strukturiere ich Git-Repositorys für ein Projekt?


9

Ich arbeite an einem Inhaltssynchronisationsmodul für Drupal. Es gibt ein Servermodul, das sich auf einer Website befindet und Inhalte über einen Webdienst verfügbar macht. Es gibt auch ein Client-Modul, das sich auf einer anderen Site befindet und den Inhalt in regelmäßigen Abständen abruft und importiert.

Der Server wird auf Drupal 6 erstellt. Der Client wird auf Drupal 7 erstellt. Es wird eine Druapl 7-Version des Servers benötigt. Und dann wird eine Drupal 8-Version sowohl des Clients als auch des Servers erforderlich sein, sobald sie nächstes Jahr veröffentlicht wird.

Ich bin ziemlich neu in der Git- und Quellcodeverwaltung, also habe ich mich gefragt, wie ich die Git-Repositorys am besten einrichten kann. Wäre es ein Fall, ein separates Repository für jede Instanz zu haben, dh:

Drupal 6 server = 1 repository
Drupal 6 client = 1 repository
Drupal 7 server = 1 repository
Drupal 7 client = 1 repository
etc 

Oder wäre es sinnvoller, ein Repository für den Server und ein anderes für den Client zu haben und dann Zweige für jede Drupal-Version zu erstellen?

Derzeit habe ich 2 Repositorys - eines für den Client und eines für den Server.

Antworten:


7

Wenn das Projekt nicht wirklich riesig ist, würde ich mich für ein einzelnes Repository mit Unterverzeichnissen für Server und Client entscheiden und für jede Version einen Zweig erstellen. Sie können weiterhin mehrere Kopien des Repositorys haben, falls Sie gleichzeitig auf mehrere Versionen zugreifen möchten.

Durch die Verwaltung mehrerer Repositorys würden Sie das Übertragen von Änderungen schwieriger als nötig machen (Rebase ist einfacher als das Anwenden von Patches). In dem (unwahrscheinlichen) Fall, dass keine Änderungen auf mehrere Versionen angewendet werden müssen, verlieren Sie immer noch nichts ...

Darüber hinaus können Sie jederzeit zu mehreren Repositorys wechseln: Klonen Sie einfach das Repo und entfernen Sie die nicht gewünschten Zweige. Es ist schwieriger, in die andere Richtung zu gehen.

Ich würde mich nur dann für mehrere Repos entscheiden, wenn Server und Client nichts gemeinsam nutzen oder wenn der Code wirklich riesig ist.


Dies ist der Weg, den ich gehen werde, weil Drupal verschiedene Versionen als Zweige speichert. Ich würde auch +1, brauche aber 15 Wiederholungen!
littledynamo

4

Ich habe solche Variationen gesehen und damit gearbeitet. Alles in einem Ordner mit Unterordnern für Server und Client oder jeweils einem Repo. Ich bevorzuge das einzelne Repo für jeden Hauptteil des Projekts.

Bei großen Versionsänderungen würde ich einfach auch neue Repos erstellen. Auf keinen Fall unterschiedliche Branchen für sie haben. Während Zweige für die Implementierung neuer Funktionen und möglicherweise eines permanenten Bereitstellungszweigs leistungsstark sind, vermeide ich immer, dass zu viele von ihnen lange Zeit parallel ausgeführt werden. Sie müssen sie immer pflegen (Rebases durchführen, wenn sich der Hauptzweig geändert hat usw.), also halten Sie die grundlegende Strukturierung so einfach wie möglich. Ein zusätzliches Repo zu haben ist (meiner bescheidenen Meinung nach) weniger schmerzhaft als das Jonglieren von Zweigen in verschiedenen Staaten. Insbesondere, wenn Client und Server nicht viel Code gemeinsam nutzen.

Ich weiß nicht viel über Drupal und wie stark die Unterschiede zwischen den Versionen sind. Mein Grund, andere Repos zu bevorzugen, basiert also mehr auf meiner Erfahrung mit Rails. Zwischen den Versionen gibt es manchmal große Unterschiede in Bezug auf die Benennung von Dateien oder die Ordnerstruktur (z. B. Asset-Pipeline), wodurch das Erstellen eines neuen Repos komfortabler wird. Drupal (oder ein anderes Framework) kann weniger Unterschiede aufweisen, dann wäre es in Ordnung, einfach innerhalb des vorhandenen Repos fortzufahren.


1
Vielen Dank. Es ist interessant, weil ich gerade entdeckt habe, dass Drupal Core-Module separate Versionen als Zweige speichern. Ich denke, es ist sinnvoll für mich, diese Struktur nachzuahmen. Ich würde +1 aber brauche 15 Wiederholungen!
littledynamo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.