Als ich vor git init
ungefähr einem Monat mein letztes Projekt bearbeitet habe, habe ich den Befehl in dem Verzeichnis ausgeführt, das ein Verzeichnis höher als das Stammverzeichnis meines Projekts ist.
Mein Repository befindet sich also im ./project
Verzeichnis und nicht im ./project/my-new-project
Verzeichnis. Ich weiß nicht, wie ich das Problem früher nicht erkannt habe, aber ich habe bis jetzt nie nach dem .git-Verzeichnis gesucht.
Gibt es eine Möglichkeit, ohne mein Projekt zu beenden, das Repository in das richtige Verzeichnis zu verschieben und git dann mitzuteilen, was die neue Basis des Projekts ist? Nur das Verzeichnis zu verschieben funktioniert nicht. Git glaubt, dass alle Dateien gelöscht wurden.
Ich hatte das gegenteilige Problem - musste das Git-Stammverzeichnis in das übergeordnete Verzeichnis verschieben (von project / src zu project). Zu meiner großen Überraschung funktionierte Folgendes !!
Git erkannte geschickt, dass alle neuen Dateien in alte Versionen umbenannt wurden und kein Verlauf verloren ging
Sie können etwas Ähnliches versuchen ... Verschieben Sie den Ordner .git und fügen Sie die Dateien erneut hinzu, bevor Sie sie festschreiben
quelle
git rm'd
die Dateien von ihrem alten Speicherort, so dassgit status
(korrekt) eine Reihe von Umbenennungsvorgängen gemeldet wurden. Je mehr ich mit Git arbeite, desto mehr gefällt es mir..gitignore
und ausgeführtgit add -A
. Danach zeigte git alle Dateien korrekt alsrenamed
stattdeleted
. 2. Da ich Submodule verwende, musste ich zum.gitmodules
neuen Stammverzeichnis wechseln und den Submodulpfad in den verschiedenen Git-Konfigurationsdateien aktualisieren. Um herauszufinden, welche Dateien geändert werden müssen, lief ichgrep -nrI --color 'old/path/to/submodule' .
Dies funktionierte für mich und hielt meine gesamte Geschichte intakt. Aus dem falschen Stammordner (dem übergeordneten Ordner, in dem Sie das Repo versehentlich initialisiert haben):
Verschieben Sie den Ordner:
Initialisieren Sie das Git-Repo neu:
Fügen Sie alle Dateien erneut hinzu, schreiben Sie sie fest und drücken Sie:
Getan! Hol dir ein Bier.
Wenn Sie das Git-Repo nach der Neuinitialisierung festschreiben, erhalten Sie eine Reihe von Ausgaben, die folgendermaßen aussehen:
Mit anderen Worten, alle Ihre Referenzen stammen aus dem übergeordneten Ordner und werden umbenannt, um den richtigen Ordner zu verwenden.
quelle
git filter-branch
Auf diese Weise können Sie den Verlauf neu schreiben. Diegit filter-branch
Manpage hat sogar Ihren Fall als Beispiel :Sie möchten
git clone
das Repo wahrscheinlich vor (oder nach?) Demgit filter-branch
Lauf in ein neues Unterverzeichnis verschieben . (Das Klonen vor dem Filterzweig und das Ausführen des Filterzweigs auf dem neuen Klon hätte den Vorteil, dass das ursprüngliche.git/
Verzeichnis als Backup beibehalten wird, falls etwas schief geht.)quelle
.git
Repo auf der obersten Ebene bleibt, während Unterverzeichnisse als "Root" betrachtet werden) - dies verwirft buchstäblich alle anderen Dateien im Repo und verschiebt allesubdirectory/*
Dateien in den Root-Ordner .git push --force
, um das Upstream-Repository danach zu aktualisieren.Git kann sich Dateien mit ihren Hashes merken,
Verschieben Sie einfach Ihr
.git
Verzeichnis in das Stammverzeichnis und teilen Siegit
uns mit, dass alle Dateiänderungen mit--all
Option gespeichert werden sollen .quelle
Verwenden
git-mv
Sie diese Option , um Ihre Dateien "nach oben" an den richtigen Speicherort und dann ingit-rm
das Verzeichnis "Mein neues Projekt" zu verschieben.quelle
Ich bin hierher gekommen, um nach einer Möglichkeit zu suchen, mein Repository irgendwohin zu verschieben .
Für den Fall, dass ich nicht der einzige war, habe ich am Ende Folgendes getan:
https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F Ich "git clone --mirror" da nackte Kopie meines Repos und sagte danach, dass es nicht mehr nackt sein soll, also wurden die Dateien angezeigt in diesem neuen Ordner. (Dann wurde überprüft, ob Dateien und Protokolle angezeigt wurden oder nicht.) Das alte Repo wurde eine Weile beibehalten, nur für den Fall ...
Auf diese Weise konnte ich mein Repo verschieben, ohne die Geschichte zu verlieren.
Beste Grüße, Dinah
quelle
mv /path/to/the/old/location/of/the/repo /path/to/the/new/location/of/the/repo
.Nachdem ich gerade dasselbe Problem durchlaufen hatte, war meine mögliche Lösung:
git reset --hard HEAD
Es funktionierte wie Magie ohne Einfluss auf die Geschichte. - NB Wenn Sie einige Änderungen vorgenommen haben, müssen Sie diese vor dem Verschieben des .git-Verzeichnisses festschreiben.
quelle
Hier gibt es zwei Möglichkeiten:
quelle