Frage

Ich habe ein Git Medienarchiv, wo ich alle meine JavaScript und CSS-Master-Dateien und Skripte bin zu halten, die ich an verschiedenen Projekten verwenden werden.

Wenn ich ein neues Projekt zu erstellen, das in seiner eigenen Git-Repository ist, wie verwende ich JavaScript-Dateien von meinem Medienarchiv in meinem neuen Projekt in eine Weise, die es so macht ich nicht beiden Kopien des Skripts aktualisieren muß, wenn ich mache Änderungen?

War es hilfreich?

Lösung

Der Schlüssel ist git Submodule .

Starten Sie die Submodule Kapitel des Git Gemeinschaft Buch lesen oder von die Benutzerhandbuch

Angenommen, Sie haben Repository PROJECT1, PROJECT2 und MEDIA ...

cd /path/to/PROJECT1
git submodule add ssh://path.to.repo/MEDIA
git commit -m "Added Media submodule"

Wiederholen Sie auf der anderen Repo ...

Nun ist die kühle Sache ist, dass jedes Mal, wenn Sie Änderungen an MEDIA begehen, können Sie dies tun:

cd /path/to/PROJECT2/MEDIA
git pull
cd ..
git add MEDIA
git commit -m "Upgraded media to version XYZ"

Das aufgezeichnet nur die Tatsache, dass das MEDIA-Submodul WITHIN PROJECT2 nun in der Version XYZ ist.

Es gibt Ihnen 100% Kontrolle über welche Version von MEDIA jedes Projekt verwendet. git Submodule sind groß, aber Sie brauchen, um über sie zu experimentieren und zu lernen.

  

Mit großer Macht kommt auch die große Chance, in dem Hintern gebissen werden.

Andere Tipps

Erwägen Sie subtree statt Submodule, wird es Ihre Repo-Benutzer das Leben viel einfacher machen. Sie können detaillierte Anleitung in Pro Git Buch finden .

Wenn ich Ihr Problem gut verstehen, wollen Sie die folgenden Dinge:

  1. Haben Sie Ihre Mediendateien in einer einzigen git-Repository gespeichert, die von vielen Projekten verwendet wird
  2. Wenn Sie eine Mediendatei in eines der Projekte in Ihrem lokalen Rechner ändern, sollte es sofort in jedem anderen Projekt erscheinen (so wollen Sie nicht + Push-to commit + die ganze Zeit ziehen)

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.

Als erstes sollten Sie eine wichtige Sache entscheiden: wollen Sie für jede Version in Ihrem Projekt-Repository auf die Version der Mediendateien einen Verweis speichern? So zum Beispiel, wenn Sie ein Projekt haben example.com genannt, wissen Sie, müssen die Style.css früher vor 2 Wochen, oder die neueste ist immer (oder meistens) die beste?

Wenn Sie das nicht wissen müssen, ist die Lösung einfach:

  1. Erstellen Sie ein Repository für die Mediendateien und eine für jedes Projekt
  2. einen symbolischen Link in Ihren Projekten erstellen, die auf das lokal geklonte Medienarchiv. Sie können entweder einen relativen symbolischen Link (zB ../media) erstellen und gehen davon aus, dass jeder das Projekt Kasse wird, so dass das Medienverzeichnis im selben Ort ist, oder den Namen des symbolischen Link in .gitignore schreiben, und jeder kann entscheiden wo er / sie die Mediendateien setzt.

In den meisten Fällen jedoch wollen Sie diese Versionsinformationen kennen. In diesem Fall haben Sie zwei Möglichkeiten:

  1. Speichern jedes Projekt in einem großen Repository. Der Vorteil dieser Lösung ist, dass Sie nur 1 Kopie des Medienarchiv haben. Der große Nachteil ist, dass es viel schwieriger ist zwischen Projektversionen zu wechseln (wenn Sie auf eine andere Version Kasse werden Sie immer alle Projekte ändern)

  2. Verwenden Sie Submodule (wie in Antwort 1 erklärt). Auf diese Weise speichern Sie die Mediendateien in einem Repository, und die Projekte nur einen Verweis auf eine bestimmte Medien Repo-Version enthalten. Aber auf diese Weise Sie werden in der Regel haben viele lokale Kopien des Medienarchiv, und Sie können nicht einfach eine Mediendatei in allen Projekten ändern.

Wenn ich Sie wäre, würde ich wahrscheinlich wählen Sie die erste oder dritte Lösung (symbolische Links oder Submodule). Wenn Sie sich entscheiden Submodule verwenden, können Sie immer noch eine Menge Dinge tun, um Ihr Leben leichter zu machen:

  1. Bevor sie sie können Sie das Submodul Verzeichnis umbenennen und einen symbolischen Link zu einem gemeinsamen Medium Verzeichnis. Wenn Sie bereit sind zu begehen, können Sie den Symlink entfernen und das Submodul zurück, entfernen und dann begehen.

  2. Sie eine Ihrer Kopie des Medienarchiv hinzufügen kann als Remote-Repository, um alle Ihre Projekte.

Sie können lokale Verzeichnisse als Remote hinzufügen auf diese Weise:

cd /my/project2/media
git remote add project1 /my/project1/media

Wenn Sie eine Datei in / my / project1 / Medien ändern, können Sie es begehen, und ziehen Sie es aus / my / project2 / Medien, ohne sie zu einem Remote-Server drücken:

cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master

Sie sind frei, diese Commits später entfernen (mit git reset), weil man sich nicht mit anderen Benutzern geteilt hat.

Ich hatte Probleme mit Unterbäumen und Submodule, dass die anderen Antworten vorschlagen ... vor allem, weil ich SourceTree verwende und es scheint ziemlich buggy.

Stattdessen landete ich Symlinks mit und das scheint gut zu funktionieren, damit ich es hier als eine mögliche Alternative bin Entsendung.

Es ist eine komplette Anleitung hier: http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/

Aber im Grunde brauchen Sie nur die beiden Pfade in einer erhöhten Eingabeaufforderung mklink. Stellen Sie sicher, dass Sie den / J Hardlink-Präfix verwenden. Etwas in dieser Richtung: mklink / J C: \ projects \ Mainproject \ plugins C: \ projects \ SomePlugin

Sie können auch relative Ordnerpfaden verwenden und es in eine Fledermaus gestellt von jeder Person ausgeführt werden, wenn sie zum ersten Mal das Projekt überprüfen.

Beispiel: mklink / J. \ Assets \ TaqtileTools .. \ TaqtileHoloTools

Wenn der Ordner verknüpft ist Sie können den Ordner in Ihrem Haupt-Repository müssen ignorieren, die es verweist. Andernfalls Sie sind gut zu gehen.

Hinweis Ich habe meine doppelte Antwort von einem anderen Beitrag gelöscht, wie die Post als Duplikat Frage zu dieser markiert wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top