2010-02-12 7 views
19

machen ich das Klonen ein Git-Repository von einem Computer, abgewischt werden wird.Klonen eines Repository ohne sie den Ursprung entfernte

Ist es möglich, ein Repository zu klonen ohne origin/master das ursprüngliche Repository zu machen? Oder muss ich es klonen, und löschen Sie dann den Remote-Zweig (was mit git remote rm origin getan wird)?

Bearbeiten: Das Repository hat nur einen Zweig und keine Tags.

Antwort

18

Es ist nicht notwendig, die Original-Repository der „Herkunft“ remote zu machen, den Master-Zweig zu klonen.

Auf der neuen Maschine, ein neues Repository erstellen:

git init foo 

Dann das alte Repository in die neue ziehen, ohne dass eine Remote-Erstellung:

cd foo 
git pull <reference to old repository> 

Es sollte jedoch beachtet werden, dass Die einfachste Möglichkeit, ein Repository zu speichern, wäre, das Repository-Verzeichnis einfach zu komprimieren und die Dateien auf einen neuen Rechner zu verschieben. Dadurch bleiben alle Fernbedienungen, Tags usw. erhalten.

Wenn Sie das Repository kopieren, achten Sie beim Kopieren von Groß- und Kleinschreibung (z. B. Linux, Mac, NTFS) auf Groß- und Kleinschreibung (zB Fat32).

+1

Das ist cool, ich wusste nicht, dass du das tun könntest. Können Sie Nicht-Master-Zweige auch auf diese Weise klonen? – ebneter

+0

Wenn letzteres angewendet wird, kopieren Sie nicht etwas von einer Nicht-FAT32-Partition in eine FAT32-Partition und wieder zurück. http://stackoverflow.com/questions/1754108/i-backed-up-a-git-project-and-got-fatal-not-a-git-repository –

+0

Würden Sie die ehemalige mit oder ohne 'Datei:/// ', dh mit' git pull/home/benutzername/blah' versus 'git pull file: /// home/benutzername/blah'? –

1

Ich glaube, Sie müssten den Remote-Zweig löschen.

+0

Wenn Sie möchten, dass es einen anderen Namen gibt, könnten Sie git klonen -o not_origin –

+0

Das Problem ist, dass wenn Sie die Remote (nicht Remote-Zweig) löschen, löschen Sie alle remote/ Filialen. – ebneter

+0

@ebneter: was meinst du mit "lösche die remote (nicht remote branch)"? –

1

funktioniert die Remote-Repo haben mehr Filialen als nur zu meistern? Es ist schwieriger, wenn es das tut; Sie müssen auch lokale Kopien aller Zweige erstellen, denn wenn Sie die Fernbedienung löschen, werden alle Remote-/Ursprungsverzweigungen entfernt. (Ich habe versucht, es einfach!)

So können Sie etwas tun:

git clone <remote_url> 
cd <repo> 
for b in $(git branch -r | grep -v HEAD | grep -v master);do 
    git branch $(basename $b) $b 
done 
git remote rm origin 

Natürlich, wie Jess Bowers sagte, ist es noch einfacher, nur Teer oder Reißverschluss und die Dateien verschieben, wenn Sie Zugriff auf die Maschine haben, um das zu tun.

können Sie auch mit einem nackten Klon machen gerade:

git clone --bare <remote_url> 

und dann neue Klone aus, dass machen.

2

Die allgemeine Weise, solch einen trasfer zu behandeln, wäre git bundle. Siehe Backup of github repo.

Von Ihrem zweiten (neu) Desktop:

git bundle create file:///\\oldDesktop/share/myGitRepo --all 

eine lokale Datei zu erstellen, aus dem Sie einen lokalen git Repo geklont werden können.

Hinweis: das file:/// Protokoll UNC (Universal Naming Convention) Windows-Pfad, mit dem Rest des Weges unterstützen '/' anstelle von '\' verwenden. Siehe Git on a Windows Lan.

6

Erstens können Sie --origin <name> Möglichkeit git clone

--origin <Name>, -o <Name>

statt mit der Fernbedienung Name Herkunft verwenden Um das Upstream-Repository zu verfolgen, verwenden Sie <Name>.

Zweitens können Sie git remote add verwenden Repository hinzufügen aus, um vorhandene Repository zu holen (so können Sie git init, dann git remote add <name> <url> verwenden).


Wenn Sie einen Spiegel-Repository zu erstellen, mit refs/heads/* in refs/heads/* in Klon gehen, können Sie init Repository Setup entsprechenden Refspec und dann fetch ...

Oder Sie verwenden git clone --mirror, die aktuelle Version der OP-Frage beantworten sollte.

Dies würde jedoch Konfiguration (einschließlich Fernbedienungen), Worktree-Status, Reflogs, usw. nicht beibehalten. Dazu müssten Sie Repository als Ganzes, wie Jess Bowers said kopieren.

+0

Das Problem bei der Verwendung von '--origin' ist, dass *** du eine Ursprungs-Fernbedienung *** angeben musst, richtig? Ich versuche, eine einfache Möglichkeit zu finden, so zu klonen (oder effektiv zu klonen), dass der Klon keine entfernten Aliase konfiguriert hat. Natürlich könntest du immer 'git remote rm originally' machen, aber ich hatte gehofft, etwas zu finden, das dies in einem Schritt tun würde. –

+2

@Cupcake: Leider gibt es (soweit ich weiß) keine Ein-Schritt-Lösung. Sie können entweder die Remote-Informationen "Herkunft" klonen (1), entfernen (2) oder das Repository initialisieren (1) und alle Zweige und Tags mit der URL und nicht mit dem Remote-Namen (2) abrufen. –

+0

Ihre Antwort ist für eine andere Frage als die gestellte Frage. –