Wenn ich Ihr Problem gut verstehe, möchten Sie Folgendes:
- Speichern Sie Ihre Mediendateien in einem einzigen Git-Repository, das von vielen Projekten verwendet wird
- Wenn Sie eine Mediendatei in einem der Projekte auf Ihrem lokalen Computer ändern, sollte sie sofort in jedem anderen Projekt angezeigt werden (damit Sie nicht ständig festschreiben + drücken + ziehen möchten).
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:
- Erstellen Sie ein Repository für die Mediendateien und eines für jedes Projekt
- Erstellen Sie in Ihren Projekten einen symbolischen Link, der auf das lokal geklonte Medienrepository verweist. Sie können entweder einen relativen symbolischen Link erstellen (z. B. ../media) und davon ausgehen, dass jeder das Projekt auscheckt, sodass sich das Medienverzeichnis an derselben Stelle befindet, oder den Namen des symbolischen Links in .gitignore schreiben, und jeder kann entscheiden wo er / sie die Mediendateien ablegt.
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:
cd /my/project2/media
git remote add project1 /my/project1/media
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:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Sie können diese Commits später entfernen (mit Zurücksetzen von Git), da Sie sie nicht für andere Benutzer freigegeben haben.