Beachten Sie, dass die Verwendung von --depth=1
Parametern verhindert, dass Sie das Projekt in ein neues Repository verschieben .
Details finden Sie unter: "Remote abgelehnt" (flache Aktualisierung nicht zulässig) nach dem Ändern der Git-Remote-URL
git
git-clone
shallow-clone
itamar
quelle
quelle
--depth=N
statt 1? "Flaches Update" wird immer noch abgelehnt und tut es einfachrm -r .git
undgit init
wird es nicht schneiden. Ich werde die ganze "Unpfropf" -Magie ausprobieren, und wenn sie für den allgemeinen Fall (Tiefe N) funktioniert, sollte sie die akzeptierte (und am besten bewertete;)) Antwort sein.Antworten:
Sie können eine tun
Löschen Sie das .git-Repository aus Ihrem Ordner. Dadurch wird Ihr gesamter Verlauf gelöscht.
Das kannst du machen
Dadurch wird ein völlig neues Git-Projekt für Sie erstellt.
Dies ist möglicherweise nicht der beste Weg. Aber das wird funktionieren. Ich hoffe es hilft.
quelle
Solange Sie den vollständigen Verlust der Geschichte als kein Problem betrachten, ist der von Ajay vorgeschlagene Ansatz vollkommen gültig. Aber falls Sie die Geschichte Ihres flachen Klons beibehalten möchten, habe ich einen anderen Vorschlag.
Ein flacher Klon gibt vor, die gesamte Historie zu haben, indem er einen sogenannten Transplantationspunkt verwendet , um das Elternteil des "ersten" Commits zu fälschen. Wenn wir davon ausgehen, dass wir den vollständigen Verlauf zur Verfügung haben, könnten wir die Frage umformulieren: Wie kann ich den Verlauf vor einer bestimmten Überarbeitung wegwerfen?
Dies bedeutet, dass wir eine Kombination aus einem Transplantationspunkt und
git filter-branch
(wie in der verknüpften Frage vorgeschlagen) verwenden können. Sie müssen jedoch beachten, dass dadurch Ihr vollständiger Verlauf neu geschrieben wird und der neue nicht mit der Fernbedienung kompatibel ist, von der wir ursprünglich geklont haben. Aus diesem Grund sollten wir die alte Fernbedienung aus unserem Repository entfernen.Jetzt können wir mit dem Umschreiben beginnen. Nehmen wir an, wir möchten, dass der aktuelle Master den neuen Stamm für das Repository festschreibt.
Dadurch wird der gesamte Verlauf unseres Repositorys mit dem aktuellen Master-Commit als neuem Stamm neu geschrieben. Sie können das Umschreiben abschließen, indem Sie die "Backup" -Referenzen in entfernen
refs/original
. Außerdem können Sie jetzt die.git/shallow
Datei löschen .Nachdem Sie dies getan haben, sollten Sie in der Lage sein, den jetzt nicht gepfropften Verlauf in Ihre neue Fernbedienung zu übertragen.
quelle
git rev-parse --verify master >> .git/info/grafts
ich zuerst den neuen Transplantationspunkt ausgecheckt und dann die Festschreibungsreferenz verwendet :git rev-parse --verify 9133eece0 >> .git/info/grafts
. Ich habe dann das gemachtgit filter-branch -- --all
. Ich musste die.git/shallow
Datei nicht entfernen , da sie bereits verschwunden war.refs/original
Ich habe nicht ganz verstanden, wie man die "Backup" -Referenzen in "entfernt, und ich vermute, dies ist der Grund, warum das gepfropfte Repo immer noch 68 Millionen groß war. Nachdem ich jedoch auf das neue Upstream-Repo umgestiegen bin, habe ich es lokal neu geklont und das Ergebnis war ein 112K-Klon, was ich erwartet hatte.rm -rf .git/refs/original
. ;)git update-ref -d refs/original/master
(eigentlich ich normalerweise,git push . :refs/blah
weil ich einmal nicht über Update-Ref wusste). Eine ausführlichere Erklärung finden Sie in dieser Antwort auf "So löschen Sie den alten Verlauf" .Versuchen Sie so etwas:
Ich habe es gerade in diesem Repository versucht . Scheint zu funktionieren - keine Historie und alle Submodule sind intakt.
quelle
depth
Argumenten den Klon immer flach macht, und das ist es, was OP verlangt, und auch mein Anwendungsfall. Die richtige Antwort braucht,filter-branch
wie Zeeker sagt.