Frage

Ich arbeite an einem neuen Projekt, das ich in einem Git-Repository zu halten planen. Ich weiß, wie ich tun würde, dies in CVS, aber ich bin ein bisschen neu git und einige Vorschläge nutzen könnte.

Das Projekt ist Firmware für zwei eingebettete Geräte, die miteinander kommunizieren und werden als Paar verpackt. Für beide Geräte gibt es eine Herstellungsvariante und eine Herstellungsvariante des Codes. Beide Geräteprojekte haben eine Anzahl von Sub / Geschwister Projekte für verschiedene Bits der Hardware ausübt (blinken die LEDs, etc.) oder hardwarebezogenen Bit-Code (Treiber, etc.). Der meiste Code ist über alles gemeinsam.

Ich habe auch eine Anforderung der Lage sein, die Produktion und Fertigung Firmware unabhängig voneinander rev eine Änderung an einem von dem Senden des andere zurück durch Überprüfung zu verhindern.

Im Folgenden finden Sie meine vorhandene Verzeichnisstruktur. Es wuchs organisch und wurde weitgehend festgelegt, bevor ich wusste, dass ich mit git werden. Ich bin nicht abgeneigt, die ganze Sache neu zu organisieren, wenn es ein besserer Weg, es zu tun.

  • projectroot
    • schließen
    • src
    • deviceA
      • Produktion
      • Herstellung
      • blinken
      • Tasten
      • ...
    • DeviceB
      • Produktion
      • Herstellung
      • blinken
      • Tasten
      • ...

Ich bin auf Zweige zu setzen Produktion und Fertigung versucht, aber ich arbeite in der Regel auf beiden in einem bestimmten Tag und git erlaubt nur ein Zweig zu einer Zeit aktiv zu sein. Und dann weiß ich nicht, was mit Blinzeln zu tun, Knöpfe, usw., weil sie nicht wirklich oder Produktion herzustellen. Vorschläge?

Klärungen:

  • Die Herstellungs Version des Codes auf der Fertigungslinie verwendet, um die Hardware zu testen. Der Produktionscode geladen wird, nachdem die Hardware der Teststation passiert und ist das, was an den Kunden ausgeliefert wird. Die beide sind mindestens 75% ähnlich, aber sie müssen unabhängig sein, so kann ich einen Fehler in der Produktion Code beheben, ohne dass die Fertigungslinie zu stoppen.

  • Da deviceA und DeviceB ein Paar ist, werden beiden Codesätze markiert und zugleich mit der gleichen Release-Versionsnummer veröffentlicht.

War es hilfreich?

Lösung

Ich habe git Hardware / Software codesigns zu verwalten, so dass ich kann einige nützliche Ratschläge zu geben haben.

Als Faustregel gilt, wenn Sie Teile des Designs, die miteinander unabhängig von der Revision, die Sie gerade arbeiten zusammenarbeiten können, sind Sie besser dran machen separaten git Repositories für diese.

Um ein Beispiel zu geben, mögen Sie Ihre Treiber in einem separaten Repository von Ihrem Hardware-Design sitzen. Dies liegt daran, die Schnittstelle zwischen Software und Hardware sehr klare und ist eine natürliche Naht zu zersetzen durch. Darüber hinaus wird die gleiche Treiberversion auf eine Reihe von Designphasen des Geräts gilt.

Ich bin nicht sicher, was Sie von Produktions- und Fertigungs Ausgaben des Designs bedeuten. Wenn Sie die Entwicklung und stabile Versionen entkoppeln wollen, sollten Sie mit getrennten Zweigen für diese Ordnung sein.

Branching und in git Fusion ist so billig wie Sie bekommen können, und zwischen den Zweigen Schalt ist blitzschnell; so gibt es keine Strafe für Verzweigungen. Es ist auch ziemlich einfach zu cherry-pick kompatible Änderungen zwischen Zweigen. Der Ansatz, den Sie in der Regel in der Software-Welt zu sehen (Filialen für Versionen, plus ein HEAD) funktioniert ziemlich gut.

Sie sollten wahrscheinlich halten Sie die Demo / Testmodule (Blinkern usw.) zusammen mit den Modulen sie sollen / Test Demo. Dies liegt daran, die Demo-Kopplungsschnittstellen sind oft ändern anfällig. Auf diese Weise werden Sie die Demo-Code synchron mit den tatsächlichen Geräten halten müssen, was Design Stabilität auf lange Sicht helfen sollte.

Als Randnotiz, in der FPGA-Welt werden Prototyping Sie in der Regel auf einem großen Gerät, und productionizing auf einer eingeschränkten Gerät. Auf diese Weise Ihre Module bis zwei Sorten enden, die unabhängig voneinander entwickelt werden. Sie werden wahrscheinlich diese Sorten in getrennten Repositories halten wollen, denn sie sind in der Tat verschiedene Entitäten. In diesem Fall wird der Code, der zwischen den beiden (es gibt immer einige portable Code, den Sie wiederverwenden können) können leben in einem separaten Repo, und sein eine separate Bibliothek geteilt wird. Vor allem, wenn die Codegröße es rechtfertigt.

Sie können dann binden alle genannten Module zusammen mit Git Submodule verwenden.

Andere Tipps

Ich glaube, Sie könnten Untermodule verwenden. Ich bin nicht 100% sicher, wie das funktioniert, aber Sie können für Sie gemeinsamen Code (etwa LED und die Benutzeroberfläche, oder sogar ein Repo für jeden), und eine Kopie dieser Repo als Submodul Ihrer Repo einer Git-Repo erstellen für A, und eine andere Kopie als Submodul des Repo für B.

Wenn Sie Änderungen an den gemeinsamen Teil machen wollen, tun, dass auf dem Gerät auf dem zur Zeit arbeiten. Wenn Sie fertig sind, drücken Sie die Änderungen an die Submodule des anderen Produktes. Sie könnten auch die Repo für den gemeinsamen Teil haben woanders wenn das fühlt sich wohler.

Um es zusammenzufassen:. Haben Ihr wieder verwendbaren Code in separaten repos, so dass Sie es wieder verwenden

Ich bin kein König von Submodule, aber ich werde bald müssen die gleiche Sache tun, wie Sie tun. Also ich bin daran interessiert, wie werden Sie es zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top