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
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
Antworten:
Sie können eine tun
git clone <git_url>
Löschen Sie das .git-Repository aus Ihrem Ordner. Dadurch wird Ihr gesamter Verlauf gelöscht.
Das kannst du machen
git init
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.
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.
git remote remove <old-remote-name>
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.
git rev-parse --verify master >> .git/info/grafts
git filter-branch -- --all
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.
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 gemacht git 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:
mkdir -p /tmp/git-copy
cd /tmp/git-copy
# create another copy of your repository
git clone file:///path/to/cloned/repo
cd repo
git rebase -i (first-commit)
# in vim:
# :2,$s/^pick/squash
# :w
# Now wait, it will take a while...
git push --mirror git@github.com:username/new-repo.git
Ich habe es gerade in diesem Repository versucht . Scheint zu funktionieren - keine Historie und alle Submodule sind intakt.
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.
--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.