Wie verschiebe ich ein Git-Repository in ein anderes Verzeichnis und mache dieses Verzeichnis zu einem Git-Repository?

100

Ich habe ein Verzeichnis gitrepo1 . Dieses Verzeichnis ist ein Git-Repository.

  • Ich möchte dieses gitrepo1 in ein anderes Verzeichnis newrepo verschieben .

  • Das Verzeichnis newrepo sollte das neue Git-Repository ohne Verlust des Git-Verlaufs sein und das Verzeichnis gitrepo1 enthalten .

  • Das Verzeichnis gitrepo1 sollte jetzt nur ein Verzeichnis (innerhalb von newrepo ) ohne .gitIndex sein, dh es sollte KEIN unabhängiges Git-Repository oder Submodul mehr sein.

Wie kann ich das machen?

Pranjal Mittal
quelle
9
mv girepo1 newrepo??
Ddavison

Antworten:

108

Es ist sehr einfach. Git ist es egal, wie sein Verzeichnis heißt. Es ist nur wichtig, was drin ist. Sie können also einfach Folgendes tun:

# copy the directory into newrepo dir that exists already (else create it)
$ cp -r gitrepo1 newrepo

# remove .git from old repo to delete all history and anything git from it
$ rm -rf gitrepo1/.git

Beachten Sie, dass die Kopie ziemlich teuer ist, wenn das Repository groß ist und eine lange Geschichte hat. Sie können es auch leicht vermeiden:

# move the directory instead
$ mv gitrepo1 newrepo

# make a copy of the latest version
# Either:
$ mkdir gitrepo1; cp -r newrepo/* gitrepo1/  # doesn't copy .gitignore (and other hidden files)

# Or:
$ git clone --depth 1 newrepo gitrepo1; rm -rf gitrepo1/.git

# Or (look further here: http://stackoverflow.com/q/1209999/912144)
$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

Sobald Sie erstellt haben newrepo, kann das zu platzierende Ziel gitrepo1überall sein, auch innerhalb, newrepowenn Sie es möchten. Es ändert nichts an der Prozedur, sondern nur an dem Pfad, den Sie gitrepo1zurückschreiben.

Shahbaz
quelle
6
+1. Es ist wahrscheinlich erwähnenswert, dass dieses Problem Repositories betrifft, die mit der Git-Version 1.7.8 oder 1.7.9 erstellt wurden. Dies kann bedeuten, dass das Verschieben eines Git-Repos es unbrauchbar macht (obwohl es, wie angegeben, leicht korrigiert werden kann).
AD7six
1
Ich bin auf Windows-Maschine und benutze die Eingabeaufforderung. Ich konnte den Befehl "cp" nicht finden. Ist der Befehl "cp" für andere Betriebssysteme spezifisch?
LP13
1
@ user3862378, cpwie fast jeder Befehl oder jede Funktion ist spezifisch für andere Betriebssysteme. Tatsächlich ist es spezifisch für jedes Betriebssystem, das kein Windows ist. Rufen Sie Microsoft an und fragen Sie sie, warum sie nicht POSIX sind. Wie auch immer, cpbedeutet kopieren. mvbedeutet bewegen. rmbedeutet entfernen. Sie können Windows-Entsprechungen finden.
Shahbaz
@ Shahbaz Danke, die obige Lösung erstellt die folgende Struktur "newrepo ->. Git" und "newrepo-> alle anderen Dateien von gitrepo1" ... es wird nicht der Ordner "gitrepo1" in "newrepo" abgelegt. Ich bin gespannt, ob Manuelles Erstellen von Ordnern in Windows und Verschieben des Ordners ".git" unter den Stammordner. Würde dies funktionieren, ohne den Verlauf zu beeinflussen?
LP13
2
@ user3862378, es gibt keinen Grund, warum es nicht sollte. .git/enthält den gesamten Verlauf, einschließlich Ihres letzten Commits. Wo immer Sie es ausdrücken, Sie haben die ganze Geschichte. Wenn sich alle Dateien in diesem Verzeichnis von dem ursprünglichen Repo unterscheiden, aus dem Sie entnommen haben, wird Ihnen .git/lediglich mitgeteilt, dass einige Dateien gelöscht wurden und einige nicht verfolgte Dateien vorhanden sind. Mit a würden git reset --harddie entfernten Dateien automatisch wiederhergestellt! Zu beachten ist nur, dass .git/Sie die nicht festgeschriebenen Änderungen nicht durch Kopieren wiederherstellen können.
Shahbaz
4

Es ist ein bisschen spät und die Frage ist bereits beantwortet, aber um es ohne Kopfschmerzen zu tun:

  1. Lesen Sie , was ist der aktuelle Zweig Sie in der älteren git Ordner mit git status, sagen wir mal Zweig Entwicklung
  2. Wechseln Sie in den neuen Git-Ordner und dann git clonedas Projekt von Repo in den neuen Ordner
  3. Überprüfen Sie den aktuellen Zweig in Ihrem neuen Ordner: git checkout development
  4. Syncronize Ihren neuen Ordner mit dem älteren, mit rsync, ohne .git Ordner :rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1

Dann können Sie dort weitermachen, wo Sie aufgehört haben

emremrah
quelle
1

Es ist noch einfacher als das. Habe dies gerade getan (unter Windows, aber es sollte unter anderen Betriebssystemen funktionieren):

  1. Erstellen Sie newrepo .
  2. Verschieben Sie gitrepo1 in newrepo .
  3. Bewegen Sie .git von gitrepo1 zu newrepo (eine Ebene höher).
  4. Änderungen festschreiben (Tracking nach Bedarf korrigieren).

Git sieht nur, dass Sie ein Verzeichnis hinzugefügt und eine Reihe von Dateien umbenannt haben. Kein Problem.

david.pfx
quelle
0

Ich bin kein Experte, aber ich kopiere den .git-Ordner in einen neuen Ordner und rufe dann Folgendes auf: git reset --HARD

Starten Sie das Universum neu
quelle