Mittels git pull
kann man ein Git Repository in ein anderes ziehen und so beide zu einem zusammenführen. Die Historien beider Git-Repos bleiben dabei erhalten:
git-pull(1) führt dabei ein git fetch
gefolgt von einem git merge
aus.
In git log
kann man nun die Historie beider Projekte sehen – und einen zusätzlichen commit der das soeben durchgeführte merge darstellt.
In ein Unterverzeichnis ziehen
Mit obigem Ansatz landen sämtliche Dateien des zweiten Git-Repositories im Hauptverzeichnis des ersten. Um das zu vermeiden, kann man zuerst im zweiten Repository die Dateien in ein Unterverzeichnis verschieben:
Rückwirkend in ein Unterverzeichnis ziehen
In der aktuellen Revision liegen die Dateien dann zwar im korrekten Unterverzeichnis. In der Historie sind sie jedoch nach wie vor im Hauptverzeichnis zu finden.
Diesen Nachteil kann man vermeiden, indem man git filter-branch
zum Verschieben in das Unterverzeichnis nutzt.
Achtung: git filter-branch
ändert die Historie. Siehe dazu diesen Hinweis aus der git-filter-branch(1) Manpage:
WARNING! The rewritten history will have different object names for all the objects and will not converge with the original branch. You will not be able to easily push and distribute the rewritten branch on top of the original branch. Please do not use this command if you do not know the full implications, and avoid using it anyway, if a simple single commit would suffice to fix your problem.
Unterverzeichnisse ohne Eingriff in das zweite Git-Repository?
Ich könnte mir vorstellen, dass etwas Ähnliches direkt mit git pull
umsetzbar ist ohne das zweite Repository verändern zu müssen.
Solltest Du eine solche Möglichkeit kennen, freue ich mich über einen entsprechenden Hinweis in den Kommentaren.