Mein Git-Repository befindet sich im falschen Stammverzeichnis. Kann ich es bewegen? (../ Anstatt von ./)

Irgendwie, als ich vor einem Monat mein neuestes Projekt gestartet habe, habe ich den Befehl im Verzeichnis um ein Verzeichnis höher als das root meines Projekts ausgeführt.

Daher befindet sich mein Repository im Verzeichnis ./project und nicht im Verzeichnis ./project/my-new-project . Ich weiß nicht, wie ich das Problem früher bemerkt habe, aber ich habe bis jetzt nie nach dem .git-Verzeichnis gesucht.

Gibt es eine Möglichkeit, ohne das Projekt zu beenden, das Repository in das richtige Verzeichnis zu verschieben und git dann mitzuteilen, was die neue Basis des Projekts ist? Das Verschieben des Verzeichnisses funktioniert nicht. Git denkt, dass alle Dateien gelöscht wurden.

Wahrscheinlich ist die einfachste Sache, wenn Sie nicht bereits einige Historien erstellt haben, die Sie speichern möchten, nur das Unterverzeichnis .git zu löschen und die Init im richtigen Verzeichnis zu wiederholen.

Wenn du git benutzt hast, um das Problem zu lösen, würde jede Lösung notwendigerweise viele Einträge hinterlassen, die sich nicht wirklich geändert haben, aber du machst einen Fehler bei der Erstellung. Besser, es einfach richtig zu machen.

Ich hatte das gegenteilige Problem – musste die Git-Wurzel in das Eltern-Verzeichnis (von Projekt / src zu Projekt) verschieben. Zu meiner extremen Überraschung funktionierte das Folgende !!

 src$ mv .git ../ src$ cd .. project$ git add src project$ git commit -a 

git erkannte geschickt, dass alle neuen Dateien in alte umbenannt wurden und keine Historie verloren ging

Sie können etwas Ähnliches versuchen … verschieben Sie den .git-Ordner und fügen Sie die Dateien erneut hinzu, bevor Sie sie übergeben

git filter-branch können Sie Geschichte auf diese Weise neu schreiben. Die git filter-branch man-Seite hat sogar Ihren Fall als Beispiel :

Um das Repository neu zu schreiben, so als ob foodir / sein Projektwurzel wäre, und alle anderen Historien zu vercasting:

 git filter-branch --subdirectory-filter foodir -- --all 

Wahrscheinlich möchten Sie den Repo in ein neues Unterverzeichnis git clone bevor (oder nach?) Der git filter-branch ausgeführt wird. (Das Klonen vor dem Filter-Zweig und das Ausführen des Filter-Zweigs auf dem neuen Klon hätte den Vorteil, dass das ursprüngliche .git/ dir als Backup .git/ falls etwas schief geht.)

Das funktionierte für mich und behielt meine ganze Geschichte intakt. Aus dem falschen Stammordner (dem übergeordneten Stammverzeichnis, in dem Sie den Repo versehentlich initialisiert haben):

Verschiebe den Ordner:

 mv .git thecorrectfolder/ 

Re-initialisieren Sie das Git Repo:

 cd thecorrectfolder/ git init 

Fügen Sie alle Dateien erneut hinzu, committen Sie und drücken Sie:

 git add . git commit -am 'fixing things' git push origin master 

Erledigt! Hol dir ein Bier.

Wenn Sie den Git-Repo nach der Neuinitialisierung festschreiben, erhalten Sie eine Reihe von Ausgaben, die wie folgt aussehen:

 rename {ethanode/coffee => coffee}/app.coffee (100%) 

Mit anderen Worten, alle Ihre Referenzen aus dem übergeordneten Ordner und umbenannt, um den richtigen Ordner zu verwenden.

Git kann sich Dateien mit ihren Hashes merken,

Verschieben Sie einfach Ihre .git in das root-Verzeichnis und sagen Sie git , dass alle Änderungen der Dateien mit der Option --all .

 $ mv .git ../ $ cd .. $ git add . --all $ git status // => you can see all the files recognized as renamed 100% $ git commit -m "Moves repo to root directory." 

Verwenden Sie git-mv , um Ihre Dateien an den richtigen Ort zu verschieben, und geben Sie dann das Verzeichnis “my-new-project” ein.

Ich kam hierher, um nach einem Weg zu suchen, mein Repository überall hin zu bewegen.

Falls ich nicht der Einzige war, habe ich am Ende Folgendes gemacht:

https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F Ich “klon klon –spiegel” da nackte Kopie meines Repos und sagte danach, dass es nicht mehr kahl sein sollte, so dass die Dateien auftauchten in diesem neuen Ordner. (Dann überprüft, ob Dateien und Log erschienen sind.) Habe das alte Repo für eine Weile behalten, nur für den Fall …

So konnte ich mein Repo bewegen, ohne Geschichte zu verlieren.

Beste Grüße, Dinah

Nachdem ich gerade dieses Problem getriggers hatte, war meine mögliche Lösung:

  1. Verschieben Sie den .git-Ordner an die gewünschte Position.
  2. Ändern Sie das Verzeichnis in den Ordner, in den ich gerade .git verschoben habe
  3. Setzen Sie den Inhalt des Ordners auf den git reset --hard HEAD hält: git reset --hard HEAD
  4. Überprüfen Sie, ob der Inhalt mit dem übereinstimmt, was er mit kdiff3 oder einem anderen Vergleichstool sein soll
  5. Löschen Sie die jetzt nicht versionierten Dateien am alten Speicherort.

Es funktionierte wie Magie ohne Einfluss auf die Geschichte. – NB Wenn Sie einige Änderungen vorgenommen haben, stellen Sie sicher, dass Sie sie vor dem Verschieben des .git-Verzeichnisses festgeschrieben haben.

Es gibt zwei Wege hier:

  1. cd TheWrongDirectory rm -rf .git

  2. LÖSCHEN Sie einfach den .git-Ordner und cd in das richtige Verzeichnis.