Git verschiedene Repositories zusammenführen?

79

Ich habe SVN für alle meine Projekte verwendet. Manchmal stammt Projekt B als Kopie von Projekt A. Wenn Projekt A eine generische Änderung aufweist, kann ich sie svn merge Ain Verzeichnis B verwenden und diese Änderungen zusammenführen.

Nun, wenn ich Git verwenden wollte. Ich mag es nicht, alle meine Projekte im selben Repository zu haben, da ich dann alles klonen muss und nicht nur ein Projekt wie in SVN auswählen kann. Aber wie kann ich mit einem Repository für jedes Projekt dasselbe tun, wie ich es zuvor mit SVN getan habe?

Die Frage ist: Wie kann ich es am besten strukturieren, wenn ich mehrere Teilprojekte haben möchte, die sich wirklich alle auf ein Originalprojekt beziehen, und sie synchron halten möchte? Und dass ich sie auch separat auschecken möchte

baloo
quelle
1
Sie sollten sich wahrscheinlich besser das Git-Submodul ansehen ( kernel.org/pub/software/scm/git/docs/git-submodule.html ).
Cascabel
@Jefromi aber die Quelldateien sind im Grunde aus dem gleichen Verlauf, würde dies bedeuten, dass ich zwei Kopien der Dateien habe? Ich denke, das Submodul dient eher dazu, externe Bibliotheken zu verfolgen, die Sie als separate Dateien einschließen (nicht zusammenführen).
Baloo
Egal, ich habe nicht gesehen, dass Sie sagten, B sei eine Kopie von A. Beim Lesen Ihrer "Frage ist", wo Sie "Teilprojekte ... in Bezug auf ein Originalprojekt ... synchron" sagten, nahm ich an, dass Sie damit meinten Teile des ursprünglichen Projekts herausnehmen, aber im Metaprojekt synchron halten.
Cascabel

Antworten:

140

Wenn Sie zwei Projekte haben proj1und proj2Änderungen von proj1in zusammenführen möchten, gehen proj2Sie folgendermaßen vor:

# in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge

Ich glaube, das macht dasselbe wie das, was Sie mit SVN gemacht haben.

Olivier Verdier
quelle
Aber wird die Änderung von Änderung Nr. 2, die wir bereits zusammengeführt haben, Änderung Nr. 1 auf diese Weise zusammenführen? Ich musste alle Änderungen (und Konflikte korrigieren) für alle Änderungen jedes Mal neu zusammenführen, wenn eine neue Änderung hinzugefügt wurde, wenn ich mich richtig erinnere. Dies geschah nicht auf SVN-Weise
baloo
Das Zusammenführen funktioniert natürlich wie gewohnt. Sie müssen nicht "alle Änderungen neu zusammenführen". Dies ist nichts weiter als die übliche Zusammenführung, die Sie mit einem entfernten Server verwenden würden.
Olivier Verdier
Was ist, wenn ich keine Fernbedienung habe? Ich würde gerne dasselbe tun (projA in projB zusammenführen), aber ich arbeite nur lokal ohne Fernbedienungen.
L. Holanda
1
@LeoHolanda Lokale Dateien gelten für git als remote.
PyRulez
3
@LeoHolanda Du hast hier einen Punkt. Ich musste lokales Repo im URL-Format bezeichnen, z. B. Datei: ///Users/abc/path/to/my/repo/.git
mcku