Ich möchte ein Remote-Git-Repository in meinem Arbeits-Git-Repository als Unterverzeichnis davon zusammenführen. Ich möchte, dass das resultierende Repository den zusammengeführten Verlauf der beiden Repositorys enthält und dass jede Datei des zusammengeführten Repositorys ihren Verlauf wie im Remote-Repository beibehält. Ich habe versucht, die Teilbaumstrategie zu verwenden, wie unter Verwenden der Teilbaum-Zusammenführungsstrategie beschrieben , aber nachdem ich dieses Verfahren befolgt habe, haben einzelne Dateien, die von der entfernten stammen, ihren Verlauf nicht beibehalten, obwohl das resultierende Repository tatsächlich den zusammengeführten Verlauf der beiden Repositorys enthält (`git log 'auf einem von ihnen zeigt nur die Meldung" Zusammengeführter Zweig ... ").
Außerdem möchte ich keine Submodule verwenden, da ich nicht mehr möchte, dass die beiden kombinierten Git-Repositorys getrennt sind.
Ist es möglich, ein Remote-Git-Repository in einem anderen als Unterverzeichnis zusammenzuführen, wobei einzelne Dateien aus dem Remote-Repository ihren Verlauf beibehalten?
Vielen Dank für jede Hilfe.
BEARBEITEN: Ich probiere derzeit eine Lösung aus, die Git-Filter-Zweig verwendet, um den zusammengeführten Repository-Verlauf neu zu schreiben. Es scheint zu funktionieren, aber ich muss es noch etwas testen. Ich werde zurückkehren, um über meine Ergebnisse zu berichten.
EDIT 2: In der Hoffnung, ich mache mich klarer, gebe ich die genauen Befehle an, die ich mit der Teilbaumstrategie von git verwendet habe, was zu einem offensichtlichen Verlust des Verlaufs der Dateien des Remote-Repositorys führt. Sei A das Git-Repo, in dem ich gerade arbeite, und B das Git-Repo, das ich als Unterverzeichnis in A aufnehmen möchte. Es hat folgendes getan:
git remote add -f B <url-of-B>
git merge -s ours --no-commit B/master
git read-tree --prefix=subdir/Iwant/to/put/B/in/ -u B/master
git commit -m "Merge B as subdirectory in subdir/Iwant/to/put/B/in."
Nach diesen Befehlen und dem Aufrufen des Verzeichnisses subdir / Iwant / to / put / B / in werden alle Dateien von B angezeigt, aber git logauf jedem von ihnen wird nur die Festschreibungsmeldung "B als Unterverzeichnis in subdir / Iwant / to / put zusammenführen" angezeigt /Behälter." Ihr Dateiverlauf wie in B geht verloren.
Was zu funktionieren scheint (da ich ein Anfänger auf Git bin, kann ich mich irren) ist das Folgende:
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B's master
git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&subdir/Iwant/to/put/B/in/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
git checkout master
git merge B_branch
Der obige Befehl für filter-branch stammt von git help filter-branch, in dem ich nur den Subdir-Pfad geändert habe.
gitksagt über die Geschichte aus? Ich habe in der Vergangenheit die Zusammenführung von Git-Teilbäumen erfolgreich verwendet. Vielleicht können Sie Ihre genauen Befehle offenlegen? Ich bin mir nicht sicher, ob Git-Filter-Branch der richtige Ansatz ist. Ich könnte empfehlen, git-fast-export und git-fast-import zu versuchen, um eine neue Geschichte zu synthetisieren.