Best Practice für Git-Repositories mit mehreren Projekten im traditionellen n-Tier-Design

Bin ich den Schalter von einer zentralen SCM-system für GIT. OK, ich gebe zu, es ist Visual SourceSafe. Also zusätzlich zu bekommen über die Lernkurve der Git-Befehle und-workflow, die größte Frage, die ich bin derzeit konfrontiert ist, wie die Migration unserer aktuellen repository über Git in Bezug auf einzelne oder einige Geschmack von mehreren repositories.

Ich habe gesehen, diese Frage in einer Vielzahl von Möglichkeiten, aber in der Regel nur die grundlegenden..."ich habe Anwendungen, die teilen wollen etwas niedrigeren Niveau-Bibliotheken" und die Dose Antwort ist immer "verwenden Sie separate Repositorys" und/oder "use Git Submodule" ohne viel Erklärung, Wann/warum das Muster verwendet werden soll (was es tut, zu überwinden, was hat es zu beseitigen?) Aus meinem beschränkten wissen/Lesen auf Git so weit, scheint es, dass die teilmodule können Ihre eigenen Dämonen zu kämpfen, vor allem für jemand, der neu in Git.

Jedoch, was ich habe noch zu sehen, jemand der unverhohlen Fragen, ist, "Wenn Sie den traditionellen n-tier-Entwicklung (UI -, Business -, Daten -, und dann Shared Tools), wo jeder Ebene ist ein eigenes Projekt, sollten Sie mit einem oder mehreren repositories?" Es ist mir nicht klar, weil fast immer, wenn ein neues 'feature' ist Hinzugefügt, code-änderungen der welligkeit durch jede Schicht.

Um die Sache zu verkomplizieren mit Bezug auf Git, wir haben dupliziert, diese Schichten über 'frameworks' um überschaubare Projekte/Komponenten aus der Perspektive eines Entwicklers. Für die Zwecke dieser Diskussion nennen wir diese Sammlung von Projekten/Layer 'Tahiti', welche für die gesamte 'Produkt'.

Die Letzte "Schicht" in unserem set-up ist die Zugabe von client-Webseiten/Projekte, die Sie anpassen/erweitern auf Tahiti. Repräsentiert diese in einem Ordner Struktur könnte am besten so Aussehen:

/Clients
  /Client1
  /Client2

/UI Layer
  /CoreWebsite (views/models/etc)
  /WebsiteHelper (contains 'web' helpers appropriate for any website)
  /Tahiti.WebsiteHelpers (contains 'web' helpers only appropriate for Tahiti sites)

/BusinessLayer (logic projects for different 'frameworks')
  /Framework1.Business
  /Framework2.Business

/DataLayer
  /Framework1.Data
  /Framework2.Data

/Core (projects that are shared tools useable by any project/layer)
  /SharedLib1
  /SharedLib2

Nach einer Erläuterung, wie wir noch mehr auf die traditionellen n-tier-design mit mehreren Projekten, ich bin auf der Suche nach einer Erfahrung, auf welche Entscheidung, die Sie gemacht haben mit einer ähnlichen situation (auch die einfache Benutzeroberfläche, Business -, Daten-Trennung wurde allen, die Sie verwendet) und was war einfacher/schwieriger, weil Ihre Entscheidung. Gehe ich Recht in mein vorläufiges zu Lesen, wie Submodule kann sein, ein bisschen Schmerz? Schmerzen mehr als Wert ist der nutzen?

Mein Bauchgefühl ist ein repository für Tahiti (alle Projekte mit Ausnahme der "Kunden-Projekte"), dann ein repository für jeden client. Die gesamte Tahiti-Quelle, die ich vermute, hat <10k Dateien. Hier ist meine Argumentation (und ich begrüße Kritik)

  • Es scheint mir, dass in Git, die Sie verfolgen möchten, die Geschichte von 'features' vs einzelne 'Projekte/Dateien', und auch mit unserer Projekt-Trennung, ein "feature" wird immer über mehrere Projekte.
  • Ein 'feature', codiert in die core-Website wird fast immer minimal-Effekt der Kern-website und alle Projekte, für die ein 'framework' (d.h. CoreWebsite, 1.Business, 1.Daten)
  • Ein feature kann leicht über mehrere frameworks (ich würde sagen 10% der features, die wir umsetzen würde Spannweite Rahmen - CoreWebsite, 1.Business, 1.Daten, Framework2.Business, Framework2.Daten)
  • In eine ähnliche Mode, eine Funktion, die unter Umständen änderungen von 1 oder mehr SharedLib Projekte und/oder die 'UI-Webseite-Helfer" - Projekte.
  • Änderungen für Kunden, die benutzerdefinierten code wird fast immer nur lokal sein, um Ihr repository und nicht die eine Nachverfolgung erfordern änderungen an anderen Komponenten um zu sehen, was die "gesamte Funktion ändern set" war.
  • Gegeben, dass ein feature umfasst Projekte zu sehen, die den gesamten Bereich, wenn jedes Projekt wurde eine eigene repository, es scheint, es wäre ein Schmerz zu versuchen zu analysieren, *alle* code-änderungen über repositories?

Vielen Dank im Voraus.

InformationsquelleAutor der Frage Terry | 2011-04-01

Schreibe einen Kommentar