Ich habe ein Git-Medien-Repository, in dem ich alle meine JavaScript- und CSS-Masterdateien und -Skripte aufbewahre, die ich für verschiedene Projekte verwenden werde.
Wenn ich ein neues Projekt erstelle, das sich in einem eigenen Git-Repository befindet, wie verwende ich JavaScript-Dateien aus meinem Medien-Repository in meinem neuen Projekt so, dass ich nicht beide Kopien des Skripts aktualisieren muss, wenn ich Änderungen vornehme ?
git
git-submodules
multiple-repositories
Brent O'Connor
quelle
quelle
Antworten:
Der Schlüssel sind Git-Submodule .
Lesen Sie das Kapitel Submodule im Git Community Book oder im Benutzerhandbuch
Angenommen, Sie haben das Repository PROJECT1, PROJECT2 und MEDIA ...
Wiederholen Sie auf dem anderen Repo ...
Das Coole daran ist, dass Sie jedes Mal, wenn Sie Änderungen an MEDIA vornehmen, Folgendes tun können:
Dies hat gerade die Tatsache aufgezeichnet, dass das MEDIA-Submodul WITHIN PROJECT2 jetzt die Version XYZ hat.
Sie haben 100% Kontrolle darüber, welche Version von MEDIA jedes Projekt verwendet. Git-Submodule sind großartig, aber Sie müssen experimentieren und etwas darüber lernen.
quelle
Erwägen Sie die Verwendung von Teilbäumen anstelle von Submodulen. Dies erleichtert Ihren Repo-Benutzern das Leben erheblich. Eine ausführlichere Anleitung finden Sie im Pro Git-Buch .
quelle
Wenn ich Ihr Problem gut verstehe, möchten Sie Folgendes:
Leider gibt es keine ultimative Lösung für das, was Sie wollen, aber es gibt einige Dinge, mit denen Sie Ihr Leben leichter machen können.
Zunächst sollten Sie eine wichtige Sache entscheiden: Möchten Sie für jede Version in Ihrem Projekt-Repository einen Verweis auf die Version der Mediendateien speichern? Wenn Sie beispielsweise ein Projekt namens example.com haben, müssen Sie wissen, welche style.css vor 2 Wochen verwendet wurde, oder die neueste ist immer (oder meistens) die beste?
Wenn Sie das nicht wissen müssen, ist die Lösung einfach:
In den meisten Fällen möchten Sie jedoch diese Versionsinformationen kennen. In diesem Fall haben Sie zwei Möglichkeiten:
Speichern Sie jedes Projekt in einem großen Repository. Der Vorteil dieser Lösung besteht darin, dass Sie nur eine Kopie des Medienrepositorys haben. Der große Nachteil ist, dass es viel schwieriger ist, zwischen Projektversionen zu wechseln (wenn Sie zu einer anderen Version auschecken, werden Sie immer ALLE Projekte ändern).
Verwenden Sie Submodule (wie in Antwort 1 erläutert). Auf diese Weise speichern Sie die Mediendateien in einem Repository, und die Projekte enthalten nur einen Verweis auf eine bestimmte Media Repo-Version. Auf diese Weise verfügen Sie normalerweise über viele lokale Kopien des Medienrepositorys, und Sie können eine Mediendatei nicht einfach in allen Projekten ändern.
Wenn ich Sie wäre, würde ich wahrscheinlich die erste oder dritte Lösung wählen (symbolische Links oder Submodule). Wenn Sie sich für die Verwendung von Submodulen entscheiden, können Sie noch viele Dinge tun, um Ihnen das Leben zu erleichtern:
Vor dem Festschreiben können Sie das Submodulverzeichnis umbenennen und einen Symlink zu einem allgemeinen Medienverzeichnis einfügen. Wenn Sie zum Festschreiben bereit sind, können Sie den Symlink entfernen und das Submodul wieder entfernen und dann festschreiben.
Sie können allen Ihren Projekten eine Kopie des Medienrepositorys als Remote-Repository hinzufügen.
Sie können lokale Verzeichnisse wie folgt als Remote hinzufügen:
Wenn Sie eine Datei in / my / project1 / media ändern, können Sie sie festschreiben und aus / my / project2 / media abrufen, ohne sie auf einen Remote-Server zu übertragen:
Sie können diese Commits später entfernen (mit Zurücksetzen von Git), da Sie sie nicht für andere Benutzer freigegeben haben.
quelle
www
Ordners arbeiten, sollten Sie eine.htaccess
Datei im Stammverzeichnis deswww
Ordners oder Ihres Projekts ablegenOptions +FollowSymLinks
, oder noch besser<IfModule mod_rewrite.c>{new line}Options +FollowSymLinks{new line}RewriteEngine on{new line}</IfModule>
(durch eine{new line}
neue Zeile ersetzen` )Ich hatte Probleme mit Teilbäumen und Submodulen, die die anderen Antworten vorschlagen ... hauptsächlich, weil ich SourceTree verwende und es ziemlich fehlerhaft erscheint.
Stattdessen habe ich SymLinks verwendet und das scheint gut zu funktionieren. Deshalb poste ich es hier als mögliche Alternative.
Eine vollständige Anleitung finden Sie hier: http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/
Grundsätzlich müssen Sie jedoch nur die beiden Pfade in einer Eingabeaufforderung mit erhöhten Rechten verknüpfen. Stellen Sie sicher, dass Sie das Präfix / J Hardlink verwenden. Etwas in dieser Richtung: mklink / JC: \ projects \ MainProject \ plugins C: \ projects \ SomePlugin
Sie können auch relative Ordnerpfade verwenden und diese in eine Fledermaus legen, die von jeder Person ausgeführt wird, wenn sie Ihr Projekt zum ersten Mal auscheckt.
Beispiel: mklink / J. \ Assets \ TaqtileTools .. \ TaqtileHoloTools
Sobald der Ordner verknüpft wurde, müssen Sie möglicherweise den Ordner in Ihrem Haupt-Repository ignorieren, der auf ihn verweist. Ansonsten können Sie loslegen.
Hinweis Ich habe meine doppelte Antwort aus einem anderen Beitrag gelöscht, da dieser Beitrag als doppelte Frage zu diesem Beitrag markiert wurde.
quelle