AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Werkzeuge [GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen ?
Thema durchsuchen
Ansicht
Themen-Optionen

[GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen ?

Ein Thema von Rollo62 · begonnen am 13. Aug 2020 · letzter Beitrag vom 17. Aug 2020
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#1

[GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen ?

  Alt 13. Aug 2020, 07:59
Hallo zusammen,

ich würde gerne GIT Workflows optimieren, und möglichst wenig mergen,
falls das überhaupt möglich ist.

Das Problem ist das ich eigentlich eine Quelle habe (und haben möchte), für die Kern-Sourcen.
Diese gibt es aber immer mal in leichten Versionen und Varianten,
weil ich genötigt bin z.B. für Android/iOS und/oder Rx10.3.x und 10.4 verschiedene Wege zu gehen, damit es läuft und kompilierbar ist.

Also es sieht so in der Art aus, das es eigentlich keinen stabilen Master gibt,
sondern eigentlich eher mehrere Master, je nach Konfiguration.

Delphi-Quellcode:
Master -------------------------------------------- # z.B. das ist produktiv für Win OK
Feature Rx10.3 \-----------------------------------
                 \iOS -----------------------------
                 \Android ------------------------- # z.B. das ist produktiv für Android OK
Feature Rx10.4 \-----------------------------------
                 \iOS ----------------------------- # z.B. das ist produktiv für iOS OK
                 \Android -------------------------
Ich bin also oft gezwungen ein Projekt in verschiedenen Features zu pflegen, die dann für mich als Master fungieren.

Leider kann ich das nicht mergen, es sei denn ich würde da mit allen Möglichen IFDEF's und sonstigen Tricks arbeiten.
Eine saubere Trennung ist nur schwer möglich, weil es meistens auch XML, DPROJ, und andere Dateien betrifft.
Das Ganze wird auch noch durch verschiedene OS-Versionen beeinflusst, die dann ganze API's abkündigen oder umstellen.


Ich möchte aber Vermeiden das die Feautures immer weiter auseinanderdriften, und hoffe das die irgendwann doch mal alle in einen Master gemerged werden können.

Meine Frage:
Gibt es für solche Fälle einen perfekten, optimalen Workflow in GIT, sollte ich das evtl. komplett anders strukturieren
(z.B. ein Projekt pro Platform, pro IDE-Version, ...) ?

Wie macht Ihr das ?

Geändert von Rollo62 (13. Aug 2020 um 08:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen

  Alt 13. Aug 2020, 08:43
Ich entwickle auch für mehrere Plattformen, ohne Android. Ich finde, Plattformbesonderheiten kann man recht gut verstecken. Ein Stapel IFDEFs ist nicht vermeidbar, dazu getrennte Methoden, die abhängig von der Umgebung verwendet werden sollen. Alles normal. Wenn nun eine Änderung erfolgt, die nicht spezifisch für eine Plattform ist, muss die in alle Zweige eingebaut werden, also muss doch gemerged werden. Du könntest jetzt von Deinem Master immer wieder in die jeweiligen Besonderheiten mergen, oder eben doch einen Master mit allen Plattformen haben, von dem lediglich aktuelle Entwicklungs- und Testzweige abgehen. Der Vorteil Deines Ansatzes ist die klare Trennung der Plattformen im Repository, erkauft mit unter Umständen abweichenden Implementierungs- und Featureständen und Redundanzen. Meine Variante erledigt die Trennung im Code, was ihn ab einer bestimmten Detailebene unübersichtlich macht.

Und ich entwickle nur für eine IDE Version... Fehler, die in Kompilaten auftreten, die mit einer alten Version gemacht wurden, werden durch ein Update bereinigt.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#3

AW: [GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen

  Alt 13. Aug 2020, 09:15
Was ich da gezeigt habe ist ja nicht immer zwingend, es soll nur das Problem verdeutlichen.
Es gelingt auch ab und an Alles wieder zu einem Master zu mergen.
Nur entstehen die Feature-Branches eben dadurch das auch nebenbei mal Projekte fertiggemacht werde müssen.

Die Ganzen Features entstehen dann meist, so wie jetzt auch, bei großen Wechseln von Rx10.3 auf Rx10.4,
oder auch bei SDK-Wechsel der OS,
wo eben viele Dinge siche ändern können, und separat gefixt werden müssen.

Nach einiger Zeit ist es dann auch stabil, und wenn Zeit ist wird es auch gemergt so gut es geht.
Weil die einzelnen Units so klein wie möglich sind ist es auch machbar, aber die API's driften doch oft von
einem Standard zu einem ganz anderen Hin.

Nimm als Beispiel nur mal TWebBrowser, sowas verdient schon seinen eigenen Feature-Branch.
Wobei z.B. in Win kann es bleiben, in iOS muss es so ind Android anders gemacht werden.
Mit IFDEF Kapseln geht ja meist, aber es kann auch sein das diese Features erstmal völlig inkompatibel werden.


Es geht mir eigentlich um einen optimalen Aufbau, der das sehr gut Abfangen kann.
Ist das mit den Features dann der richtige Weg, oder gibt es Alternativen ?

Z.B. könnte statt einer großen Library (die ich jetzt habe), das in mehrere einzele Teilfunktion mit separatem GIT aufgeteilt werden.
Das erhöht aber auch den Verwaltungsaufwand.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#4

AW: [GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen

  Alt 13. Aug 2020, 09:26
Vielleicht muss ich noch dazu sagen, dass ich die Projekte sehr schlank aufbaue, und mehr oder weniger nur konfiguriere.
Wärend die eingentliche Programm-Logik und Views dann in der zentralen Library liegen.

Project-1 ------------------------------ Library, mit konfigurierbaren, universellen Views und Logik
Project-2 --------------/
Project-3 -------/
Project-4 --/
...

So dass Erweiterungen dann meist in der zenttraleen Library passieren, und nicht im Projektcode.

Das hat Vor- und Nachteile:
+ Eine Fehlerbehebung behebt das gleich in allen Projekten
- Eine Erweiterung in Projekt 1 hat dann mögliche Auswirklungen auf andere Projekte

Insgesamt reduziert das meine Redundanzen enorm, wenn da nicht diese ständigen, ungeplanten Plattform-Änderungen wären.

Geändert von Rollo62 (13. Aug 2020 um 09:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: [GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen

  Alt 13. Aug 2020, 10:08
Hast Du das als Submodule eingebunden? Oder ist das ein eigenständiges Repository?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#6

AW: [GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen

  Alt 13. Aug 2020, 10:51
Nein, ich habe nur die gesamte Library im GIT,
und jedes Projekt nochmal einzeln.

Die SubModule würde noch einen Level an Komplexität dazubringen,
ich denke der hilft mir im Moment nicht viel.
Wenn ich an einem Projekt arbeite lade ich das entsprechende Feature.
Natürlich ist der Plan das mal mit SubModule zu machen, aber dann sollte der Workflow klar sein.

Bin mir da noch nicht ganz im Klaren ob und wie man das umstellen könnte.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#7

AW: [GIT] Optimaler Workflow für Projekte aus einer Quelle, und mehreren Variationen

  Alt 17. Aug 2020, 06:29
Also ich habe mal die folgenden Punkte versucht zu klären,
bin aber immer noch nicht ganz klar was jetzt der Beste Weg ist.
  • Besser Subtree statt SubModule um verschiedene Libraries zu Projekten hinzuzufügen
    Vorteile: Mit SubTree squash kann der Subtree ohne History eingebaut werden.
    Ansonsten verhält sich ein Subtree mehr oder weniger wie ein Unterverzeichnis im Projekt.
    Bei Submodules sind bei commit immer mehrere Dinge und Abläufe zu beachten, das sollte bei Subtree dann viel einfacher und intuitiver sein.
    Allerdings denke ich dass auch mit Subtree eine Zuordnung unt Projekt komplett vergurkt werden kann wenn mal mal etwas vergisst und die falsche Taste drückt.
  • Eine große Library statt einer Library mit Submodulen/Subtrees
    Das macht wohl Google auch so, mit Terabytes an Code.
  • Das Aufsplitten in weitere Unter-Libraries macht nur mehr Verwaltungsaufwand im GIT Workflow
  • Nachteil solcher großen, universellen Libraries ist natürlich das man Teilfunktionen nicht schnell und einfach separat herausziehen kann,
    falls man das mal braucht.
  • Die Teilaufgaben in solchen großen, universellen Library sind normalerweise schon gut in Units separiert, das sollte zur Separation ausreichen.
  • Nachteil: Allerdings könnte man auch immer mal etwas an den Kernfunktionen umbauen, welche sich dann gleich in zig Teilfunktionen auswirken können, die man erst fixen muss bis es wieder komplett läuft.
    Das sollte aber am Ende auch immer ein Vorteil sein, weil es den Entwickler zwingt immer alle Teilfunktionen gleich auf dem aktuellen Stand zu halten,
    so dass es im Ganzen kompilierbar bleibt.
    Jedenfalls wird das Separieren von Arbeiten an Teilaufgaben dabei wohl etwas erschwert.

Soweit wäre meine Einstellung bis jetzt dazu, d.h. die eine große Library, die ich jetzt habe, wäre schon OK vom Verwaltungsaufwant und Merging.
Ganz im Klaren bin ich mir über den optimalen Aufbau aber noch nicht,
ich habe jetzt dazu kaum konzeptuelle, strategische Dokumentationen im Web gefunden.

Bei Verwendung von Submodulen, aber auch Subtrees, muss man wohl auch sehr auf GIT-Fehleingaben achten um nicht alles zu schrotten.
Genau deshalb habe ich das so noch nicht wirklich produktiv eingesetzt, bis ich wirklich genau weiss wie das am Besten und Sichersten gemacht werden kann.

Meine ursprüngliche Idee war eigentlich die Teilfunktionen einer Library in separate GIT Repositories aufzusplitten, und diese dann wieder in ein komplettes Library Repositry zusammenzufassen.
Welches dann als eine zentrales Library-Repositry zu jedem Projekt hinzugefügt werden könnte, wobei die einzelnen Teil-Funktionen durchaus andere Stände haben könnten.
Das ist aber schon bei den ersten Überlegungen eine gruselige Vorstellung.

Das mit den Teil-Libraries ginge aber auch in die Richtung von z.B. NPM, Composer und anderen Packagemanagern, die quasi Projekte "komponieren" können.
Das würde dann schon Sinn machen, aber womöglich nur bei externen Libraries.

Die einzele, große Library hingegen, lässt sich eigentlich gut verwalten.
Es spricht wenig bis nichts dagegen.

Vielleicht hat noch jemand einen ganz anderen Aufbau im Einsatz, wäre interessant mal die Vor- und Naxchteile zu sehen.

Geändert von Rollo62 (17. Aug 2020 um 06:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz