Ich habe einige nützliche Makros im Autoconf-Archiv gefunden, und auch eine nützliche m4-Datei, die hilft, die Boost-Bibliothek zu testen. Das Autoconf-Archiv wird von GNU gehostet und der Boost m4-Helfer wird als GitHub-Repo gehostet. Ich möchte sie in einem C ++ - Projekt verwenden, das Autotools verwendet und von git verwaltet wird.
Natürlich ist es möglich, sie von Hand herunterzuladen und in das Git Repo meines Projekts einzufügen. Aber gibt es einen empfohlenen Weg, dies zu tun?
Zum Beispiel ist es möglich, sicherzustellen, dass die Dateien von Drittanbietern in der neuesten Version sind, indem der Build-Prozess sie automatisch herunterlädt, anstatt sie im Repo manuell zu aktualisieren. Es hilft auch, die Quelle von externen Dateien zu trennen, da die 3rd-Party-Dateien nicht wirklich Teil des reinen Quellcodes sind, sondern extern heruntergeladene Dateien sind.
Wenn es eine gute Sache ist, sollte es mit autogen.sh von Hand gemacht werden? Oder mit automake.am? Oder beides (z. B. Dateien in autogen.sh herunterladen und Testversion + update in automake)?
Ich denke, sie im git-Repo zu behalten ist kein Desaster (wie Dinge wie COPYING, git.mk und andere), aber es ist immer noch nützlich, wenn der Build-Prozess sie vom Web auf die neueste Version aktualisiert / p>
Im Gegensatz dazu sind autoconf-Makro-Dateien Teil der entsprechenden Quelle , die wichtig genug ist in make dist
tarball benötigt werden. In Wirklichkeit ändern sich die meisten autoconf-Makros nicht oft genug, um irgendeine Art von Update-Funktion im Build zu rechtfertigen. Selbst wenn sie oft aktualisiert wurden, gibt es keine Garantie, dass das aktualisierte Makro den vorhandenen Build nicht zerstört.
Es ist eine gute Idee, Makros unter Kontrolle zu halten.
BEARBEITEN: Ich stimme @delinquentme zu, dass das Hinzufügen dieser Dateien als ein git Submodul nett wäre (kann auf eine Version zugreifen, leicht aktualisiert werden). Aber ich sehe ein paar Probleme mit diesem Ansatz.
Der erste ist, dass git nicht (IIUC) partielle Checkouts auch mit Submodulen unterstützt. Das GNU Autoconf Archive (zum Beispiel) hat viele Makros und du wirst wahrscheinlich nur ein paar von ihnen brauchen. Der Rest der unbenutzten Dateien und Makros ist immer noch da, unbenutzt und im Weg.
Das zweite Problem ist AC_CONFIG_MACRO_DIR
findet nur Makros in eins Verzeichnis mit keine Unterverzeichnissuche in diesem Verzeichnis, was die Verwendung mehrerer Submodule nervig macht. Sie könnten es tun, indem Sie die Submodule irgendwo unauffällig auschecken und sie mit AC_CONFIG_MACRO_DIR
verknüpfen.
Für mich ist die Upstream-Geschichte des Makros nicht wirklich wichtig. Dafür ist das VCS des Upstreams zuständig: -).
Sie haben eine Reihe von Optionen für eine differenziertere Handhabung dieser Abhängigkeiten:
Submodules ( Ссылка )
... [S] ubmodule sind für verschiedene Projekte gedacht, die Sie gerne machen würden Teil Ihres Quellbaums, während die Geschichte der beiden Projekte noch läuft bleibt völlig unabhängig und Sie können nicht den Inhalt des ändern Submodul aus dem Hauptprojekt. [Hinweis: cd-in Repo wird Bearbeitungen erlauben]
Ähnelt Ihrem vorgeschlagenen In-Repo-Ansatz
Besonders leistungsfähig für jeden in Git gespeicherten Code (wie Autoconf Archives)
Friert einen exakten Commit ein ( Ссылка ) und mildert so den Chance auf Build zu brechen
Weniger Vorkonfiguration als ein Hook
Haken ( Ссылка )
Wie viele andere Versionskontrollsysteme kann Git benutzerdefinierte Skripts auslösen, wenn bestimmte wichtige Aktionen ausgeführt werden. Es gibt zwei Gruppen dieser Hooks: Client-Seite und Server-Seite.
Wird über git-spezifische Ereignisse ausgeführt
Git-unterstützt, wenn Sie nach fortlaufender Integration suchen statt nach eingefrorenen Elementen
Ich stimme mit @ ldav1s überein, sie innerhalb der Versionskontrolle zu halten, aber im Hinblick auf die Wartbarkeit könnte es hilfreich sein zu wissen, woher der Code stammt (Historie pflegen). Und mit zukünftigen Updates scheint es vorteilhaft, die Arbeit, die andere getan haben, aufzubauen ...
TLDR: Gehen Sie mit einem Submodul, pflegen Sie die Historie und machen Sie es fertig.
%Vor%Der obige Befehl submoduliert die URL in Ihre Codebasis innerhalb des aktuellen Verzeichnisses