Ich muss einen Git-Repository-Inhalt exportieren und in ein Ziel-Repository importieren. Ich kenne zwei Alternativen, um es zu tun, aber sie lösen mein Problem nicht
a) Fügen Sie das Quell-Repository als Remote hinzu und führen Sie eine Zusammenführung mit dem Ziel durch. Ich kann dies nicht verwenden, da sich beide Repositories nicht im selben Netzwerk befinden
b) Verwenden Sie git archive und kopieren Sie den Inhalt auf das Ziel. In diesem Git-Archiv gehen die Revisionsinformationen verloren.
Ich brauche etwas, das ein Archiv zusammen mit dem Versionsverlauf erstellt und es mir ermöglicht, das Ziel einzufügen. Wie kann dies geschehen?
git bundle ist genau für diesen Zweck vorgesehen.
Beispiel:
Bündeln Sie Ihr Quell-Repository vollständig
git bundle create my_repo.bundle --all
Bringen Sie “my_repo.bundle” dorthin, wo Ihr Ziel ist
Laden Sie von Ihrem Ziel Ihre Quell-Commit-Objekte hoch
git bundle unbundle my_repo.bundle
…ab diesem Punkt können Sie Ihre gewünschten Quell-Commits nach Herzenslust in Ihr Ziel-Repository zusammenführen/umbasieren/herauspicken.
Ansonsten funktioniert das Ziehen genauso:
git pull my_repo.bundle
Im Vergleich zum Klonen sind Bundles einfacher zu übertragen, da sie kleiner sind, da Ihre Dateien nicht im ausgecheckten Zustand übertragen werden.
Weitere Gründe für die Verwendung von Bundles:
Im Gegensatz zu verwenden clone --bare (wobei Ihre Dateien nicht ausgecheckt werden) werden Bundles erstellt und als einzelne Datei gepackt, sodass Sie keine zusätzliche Komprimierung/Tarballing benötigen.
Sie könnten auch einfach Ihr Quell-Repository (oder nur das .git-Verzeichnis) tarballen, aber Sie werden den ganzen überschüssigen Cache und Müll, der sich unter .git/ ansammelt, mitnehmen.
Vor dem Entbündeln müssen Sie ein vorhandenes Ziel-Repository haben oder ein neues Repo erstellen, indem Sie den Befehl git init ausgeben, da Sie sonst eine Fehlermeldung erhalten würden.
– Lin Song Yang
14. Oktober 2016 um 7:23 Uhr
@LinSongYang Das neue Repo kann auch durch Klonen aus dem Bundle erstellt werden, wie im ersten Kommentar beschrieben.
– Antak
14. Oktober 2016 um 7:33 Uhr
Ich denke, ich werde dies für die Migration von Inhouse TFS 2013 zu VSTS versuchen. Vielen Dank!
– JDPeckham
31. Juli 2017 um 14:31 Uhr
Hiery Nomus
Git klont das Repository auf einen USB-Stick, Laptop oder ein anderes Datenübertragungsmedium. Schließen Sie das an die andere Maschine an, fügen Sie das Medium als Fernbedienung hinzu und ziehen/verschmelzen Sie die Änderungen von dort …
Jeder Klon aus dem Repository enthält tatsächlich den gesamten Verlauf. Die Frage ist also wirklich, wie Sie einen Klon auf die andere Maschine bringen können.
Siehe auch: diese Frage
Also müssen wir klonen und dann unseren eigenen Archivierungsmechanismus verwenden, weil git archive den .git-Ordner überspringt, richtig?
– Codestörer
9. August 2012 um 15:53 Uhr
Ja, im Grunde kann git-archive ein Zip/Tarball einer bestimmten Revision und/oder eines Teils des Baums erstellen, behält aber keine Historie bei.
– Hiery Nomus
9. August 2012 um 18:03 Uhr
Anscheinend möchten Sie einen Fork Ihres aktuellen Repositorys erstellen. Lassen Sie mich wissen, ob ich das richtig verstanden habe: Sie möchten ein bestimmtes Git-Repository klonen. Am Klon arbeiten und dann die Änderungen in das ursprüngliche Repository einführen?
Dies geschieht, indem ich einen Fork Ihres Repositorys erstelle und dann die Änderungen aus der ursprünglichen Quelle ziehe, um Änderungen zu übernehmen.
Das Quell-Repository ist nicht direkt zugänglich. (Kann also nicht zusammengeführt/geklont werden) Gibt es einen anderen Übermittlungsmechanismus, um Änderungen über zwei getrennte Repositories hinweg zu verschieben?
– Codestörer
9. August 2012 um 9:41 Uhr
Wenn auf das Quellverzeichnis nicht zugegriffen werden kann, wie planen Sie, eine Datei daraus zu kopieren?
– verdammt
9. August 2012 um 9:56 Uhr
Es muss ohne direkten Zugriff verteilt werden
– Codestörer
10. August 2012 um 1:19 Uhr
Sie können einfach den vollständigen Repository-Ordner komprimieren, dann auf die Ziel-Workstation kopieren (über USB-Stick usw.) und dieses lokale Repository als Remote-Repository hinzufügen. Dann können Sie abrufen und zusammenführen.
12566400cookie-checkGit mit Versionsverlauf exportierenyes