2013-11-21 5 views
7

Ich habe ein ziemlich großes Projekt mit vielen Abhängigkeiten. Das Projekt wird in einem Git-Repository gespeichert und die Abhängigkeiten werden in dedizierten Git-Repositories gespeichert, die als Submodule verlinkt sind. Die Abhängigkeiten können weitere Abhängigkeiten haben (wiederum unter Verwendung von Git-Submodulen).Dependency Management in Git-Repositories (mit Submodulen)

Das funktioniert gut. Wenn jedoch zwei Abhängigkeiten eine dritte Abhängigkeit erforderlich machen, stehe ich bei Updates in Schwierigkeiten.

Ein Abhängigkeitsgraphen sieht wie folgt aus:

[Main Repo] 
    | 
    |-- [ModuleA] 
    |  | 
    |  \-- [ModuleC] 
    | 
    \-- [ModuleB] 
      | 
      \-- [ModuleC] 

Im Moment habe ich das Submodul Zeiger in ModuleA und ModuleB aktualisieren. Auf diese Weise bleiben beide Module in sich geschlossen. Das ist jedoch eine Menge Arbeit.

Wie wird dieses Problem normalerweise in größeren Projekten gelöst? Ich suche nach Best Practices, um diese Art von Problem anzugehen.

Danke!

+0

Ich möchte explizit sicherstellen, dass ModuleC immer gleich ist, wo immer es in meinem Projekt verwendet wird (ich weiß, dass der Submodulmechanismus das Auschecken verschiedener Versionen ermöglicht). –

Antwort

1

Im größeren Projekt, was Sie wollen, behalten Sie alle Ihre Abhängigkeiten auf eins Ebene.

Das bedeutet nicht, dass ModuleA und ModuleB ihre eigene Abhängigkeit zu ModuleC nicht behalten.

Das bedeutet, dass Ihr aktuelles Haupt-Eltern-Repo eine Abhängigkeit von ModuleC enthält, die als Referentenversion für C fungiert.
Das ermöglicht es Ihnen auch erkennen, wenn eine Abhängigkeit als außer Kraft gesetzt werden muss, in Ihrem Fall für einen Ihrer beiden Submodule: die Abhängigkeit zu ModuleC für ModuleA oder ModuleB wird von dem einen zu ModuleC von Ihrem Haupt-Repo außer Kraft gesetzt werden müssen .

0

Wir verwenden Quack, um bestimmte Module aus anderen Git-Repository zu ziehen. Wir müssen Code ohne die gesamte Codebasis des bereitgestellten Repositorys ziehen - wir brauchen sehr spezifische Module/Dateien aus diesem riesigen Repository und sollten bei jedem Update aktualisiert werden.

So konnten wir auf diese Weise

Konfiguration erstellen

name: Project Name 

modules: 
    local/path: 
    repository: https://github.com/<username>/<repo>.git 
    path: repo/path 
    branch: dev 
    other/local/path/filename.txt: 
    repository: https://github.com/<username>/<repo>.git 
    hexsha: 9e3e9642cfea36f4ae216d27df100134920143b9 
    path: repo/path/filename.txt 

profiles: 
    setup: 
    tasks: ['modules'] 

Mit obiger Konfiguration, erstellen Sie es 1 Verzeichnis aus bereitgestellt Github-Repository in erster Modul Konfiguration angegeben ist, wie, und das anderes ist Datei aus gegebenem Repo zu ziehen und zu erstellen.

Andere Entwickler brauchen nur

$ quack setup 

Und es zieht den Code von oben Konfigurationen laufen.

Ich hoffe, dass dies Ihr Problem der Wiederverwendung mehrerer Module beheben.

Verwandte Themen