Verwalten von Bibliotheksabhängigkeiten mit git

8

Ich habe ein Projekt, das für mehrere Betriebssysteme (Linux und Windows für jetzt, vielleicht OS X) und Prozessoren gebaut wurde. Zu diesem Projekt habe ich eine Handvoll von Bibliotheksabhängigkeiten, die extern sind, aber ich habe ein paar interne, in Quellform, die ich für jede OS-Prozessor-Kombination, die in meinem Kontext möglich ist, kompiliere (Cross-Compilieren).

Die meisten externen Bibliotheken werden nicht sehr oft geändert, nur im Falle eines lokalen Bugfixes oder eines Feature \ Bugfixes, das in einer neueren Version implementiert wurde, könnte es für das Projekt von Vorteil sein. Die internen Bibliotheken ändern sich ziemlich oft (1 Monat Zyklen) und werden von einem anderen Team in meiner Firma in binärer Form bereitgestellt, obwohl ich auch Zugriff auf den Quellcode habe und wenn ich einen Fehler beheben muss, kann ich das tun und neue Binärdateien generieren für meine Verwendung bis zum nächsten Release-Zyklus. Das Setup, das ich gerade habe, ist das folgende (nur Dateisystem):

%Vor%

Die Bibliotheken werden auf einem Server aufbewahrt und jedes Mal, wenn ich ein Update mache, muss ich neue Binärdateien und Header-Dateien auf dem Server kopieren. Die Synchronisation auf der Client-Seite erfolgt mithilfe eines Dateisynchronisierungsdienstprogramms. Natürlich müssen alle Aktualisierungen der Bibliotheken den anderen Entwicklern mitgeteilt werden und jeder muss sich daran erinnern, seinen "Abhängigkeiten" Ordner zu synchronisieren.

Ich brauche nicht zu sagen, dass ich diesen Plan nicht besonders mag. Also habe ich daran gedacht, meine Bibliotheken unter Versionskontrolle (GIT) zu stellen. Baue sie, pack sie in einen tgz \ zip und schiebe sie auf den Repo. Jede Bibliothek hätte ihr eigenes Git-Repository, so dass ich einfach bereits verwendete Versionen markieren und neue Versionen testen kann. Ein "Strom" von Daten für jede Bibliothek, die ich leicht erhalten, kombinieren, aktualisieren könnte. Ich hätte gerne folgendes:

  • beseitigt dieses normale Dateisystem, um die Bibliotheken zu behalten; Momentan werden komplette separate Ordner für jedes Betriebssystem und jede Version verwaltet und verwaltet, und manchmal werden sie nicht mehr synchronisiert, was zu einem Durcheinander führt.

  • mehr Kontrolle darüber, um eine klare Geschichte davon zu haben, welche Versionen der Bibliotheken wir für welche Version unseres Projekts verwendet haben; ähnlich wie das, was wir von git (VCS) mit unserem Quellcode erhalten können

  • kann die Versionen der Abhängigkeiten, die ich verwende (für jeden einzelnen), markieren; Ich habe mein v2.0.0 tag / branch für library_A, von dem ich es normalerweise für mein Projekt nehme, aber ich möchte die Version 2.1.0 testen, also baue ich es einfach, schiebe es auf den Server in einem anderen Zweig und rufe an Mein Build-Skript mit dieser bestimmten Abhängigkeit verweist auf den neuen Zweig

  • haben einfachere Build-Skripte - ziehen Sie einfach die Quellen vom Server, ziehen Sie die Abhängigkeiten und bauen Sie; das würde erlauben, auch verschiedene Versionen derselben Bibliothek für verschiedene Prozessor-OS-Kombinationen zu verwenden (mehr als oft brauchen wir das)

Ich habe versucht, einige Alternativen zu der direkten git-basierten Lösung zu finden, aber ohne viel Erfolg - wie git-annex , welche Art von scheint zu kompliziert für das, was ich versuche zu tun.

Was mich gerade beschäftigt, ist die Tatsache, dass es eine sehr starke Meinung gibt, wenn es darum geht, binäre Dateien unter git oder VCS zu stellen (obwohl ich technisch auch Header-Dateien hätte; ich könnte auch die von mir beschriebene Ordnerstruktur drücken) direkt zu git, um den tgz \ zip nicht zu haben, aber ich würde immer noch die Bibliotheken Binaries haben) und dass einige meiner Kollegen, getrieben durch diese geteilte starke Meinung, gegen dieses Schema der Dinge sind. Ich verstehe perfekt, dass git Inhalte und keine Dateien verfolgt, aber in gewissem Maße werde ich auch Inhalte verfolgen und ich denke, dass es definitiv eine Verbesserung gegenüber dem aktuellen Schema der Dinge sein wird, die wir gerade haben.

Was wäre eine bessere Lösung für diese Situation? Kennen Sie Alternativen zum git (VCS) -basierten Schema? Wäre es so eine monströse Sache, meinen Plan unter Git zu haben :)? Bitte teilen Sie Ihre Meinungen und insbesondere Ihre Erfahrung im Umgang mit solchen Situationen.

Danke

    
celavek 03.08.2011, 09:51
quelle

1 Antwort

2

Eine Alternative, die Ihrem Projekt noch folgen würde, wäre git-annex , mit der Sie den Header verfolgen können Dateien, während die Binärdateien an anderer Stelle gespeichert werden.
Dann kann jedes git-Repo als Submodul zu Ihrem Hauptprojekt hinzugefügt werden.

    
VonC 03.08.2011, 10:46
quelle

Tags und Links