Kopieren Sie ein Git-Repo auf Github in dieselbe Organisation

83

Ich habe ein Repo auf Github, das eine Webanwendung enthält, die auf zwei verschiedenen Domänen bereitgestellt wird. Die Anwendung verfügt hier und da über leichte Logikgabeln, die sich je nach Domäne, in der sie bereitgestellt wird, unterschiedlich verhalten.

Es ist an dem Punkt angelangt, an dem ich es in zwei separate Repos aufteilen möchte, eines für jede Domain.

Github lässt mich nicht in dieselbe Organisation einteilen. Wenn ich nach "git duplicate repo" suche, sollte ich es einfach klonen und spiegeln, aber das scheint dazu zu dienen, beide Repos synchron zu halten, was ich nicht tun möchte.

Was ist der beste Weg, um dies zu erreichen? Ich möchte den alten Commit-Verlauf möglichst in der neuen Kopie beibehalten.

jemminger
quelle
1
Eigentlich sind die git clone --bareund git push --mirrorOptionen genau das, was Sie wollen. Dies hält nicht beide Repos synchron. Es wird jedoch alles beibehalten , einschließlich aller Zweige, Tags usw. Führen Sie dies einfach in einem temporären Verzeichnis aus, um eine Kopie zu erstellen. Klonen Sie dann die neue Kopie direkt von Ihrer Fernbedienung in Ihr Projektverzeichnis.
Vastlysuperiorman

Antworten:

104

Erstellen Sie einfach ein neues Repository und verschieben Sie es von Ihrer Arbeitskopie darauf:

git clone [email protected]:me/myrepo-original
cd myrepo-original
git remote set-url origin [email protected]:me/myrepo-new
git push origin master

Jetzt haben Sie ein neues Repository myrepo-new, das mit identisch ist myrepo-original.

Larsks
quelle
3
Ok, und diese werden sich nicht gegenseitig verfolgen, oder? Bedeutet das, dass sie zwei separate, getrennte Repos werden? Das ist, was ich will.
Jemminger
3
Keines der Repositorys wird aktualisiert, es sei denn, Sie pushweisen ausdrücklich darauf hin, und das "neue" Repository zeigt keine Beziehung zum alten an.
Larsks
Vielen Dank! Sieht so aus, als ob ich das brauche.
Jemminger
3
Sie könnten auch alle Zweige schieben:git push --all origin
Marius
Dies funktionierte für mich, aber ich musste in ein anderes Format für die URL wechseln: $ git remote set-url github.com/me/myrepo-new.git
Enfors
15

Wenn Sie die Gabelbeziehung nicht benötigen (z. B. aus irgendeinem Grund eine Art entkoppeltes alternatives Repo möchten), ist es in Ordnung, das Repo als Umrisse Ihrer Google-Funde und der Antwort von Larsks zu duplizieren.

Wenn Sie es zu einer Gabel machen möchten, wenden Sie sich an den Github-Support ([email protected] oder https://github.com/support ), und er erstellt eine Gabel in derselben Organisation für Sie. (Sie sind auch nicht wählerisch, Sie müssen nur einen alternativen Namen für das Repo angeben, da die Reponamen in einem Konto eindeutig sein müssen.)


Update : Benutzer Steve Rice berichtet in den Kommentaren unten, dass der GitHub-Support angegeben hat, dass der Support derzeit keine zweite Abzweigung in Ihrem Konto einrichten würde.

GitHub hat kürzlich einen Artikel über mögliche Alternativen zum Aufteilen eines Repos in dasselbe Konto veröffentlicht. Sie können diesen Artikel hier lesen .

Nevik Rehnel
quelle
4
Kontaktaufnahme mit dem Support, Antwort: "Derzeit kann ein Konto nicht zwei Repos im selben Netzwerk besitzen." Sie schlagen stattdessen vor , ein Spiegel-Repo einzurichten .
Steve Rice
ahw das ist scheiße Entschuldigung, ich wusste nicht, dass sie ihre Politik geändert hatten :(
Nevik Rehnel
10

Verwenden Sie die Option " Repository importieren" von Github im Menü + oben auf der Seite oder öffnen Sie sie einfach

https://github.com/new/import

Dadurch wird ein neues Repository mit dem genauen Inhalt des kopierten Repositorys erstellt. Der Nachteil (der gleiche wie bei Git-Befehlen, die von Iarsks beantwortet werden ) ist, dass es für Github nicht als Gabel zählt.

Sarob
quelle
Wie konnten Sie diese Option nicht zum Laufen bringen? Ich habe sie nur erneut getestet und sie funktioniert in zwei einfachen Schritten. Alternativ können Sie ein lokales Repo in github erstellen und dort die Importfunktion verwenden, z . B. github.com/sarob/mytest/import .
Sarob
Könnte etwas mit unserem GHE gegen github.com sein, aber es funktioniert dort nicht.
Serraosays
4

Eine andere Möglichkeit wäre, das zu kopierende Original-Repo als Remote für unser aktuelles Repo hinzuzufügen.

#create a new repo in the org1 organization called myrepo-new

Führen Sie in Ihrem lokalen Terminal Folgendes aus:

git clone [email protected]:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master
Vinay Vemula
quelle
1

Alternative Lösung:

Erstellen Sie eine neue Organisation und teilen Sie sie dort auf. Wenn das Repo privat ist, bleibt es auch in der neuen Organisation privat. Dann können Sie externen Entwicklern oder wem auch immer Sie Zugriff auf das gegabelte Repo gewähren und diese können PRs wieder auf das ursprüngliche Repo bringen.

csaboable
quelle
-2

Könntest du nicht einfach den lokalen Ordner duplizieren, das Git-Zeug löschen:

rm -rf .git*

Dann ein neues Repository in diesem Ordner erstellen? Scheint sauberer und einfacher.

Ben Wilson
quelle
2
Das Löschen ./.git/würde nicht mit der vom OP erklärten Absicht helfen, "den alten Festschreibungsverlauf in der neuen Kopie nach Möglichkeit beizubehalten".
MarkHu