Wie erstelle ich ein neues GitHub-Repo aus einem Zweig in einem vorhandenen Repo?

170

Ich habe Master- und New-Project- Filialen. Und jetzt möchte ich mit seinem Master ein brandneues Repo erstellen, das auf dem Zweig des neuen Projekts basiert.

Hintergrund: Ich habe ein Repository, das drei unabhängige Anwendungen enthält. Es hat nicht so angefangen. Es gab ursprünglich nur eine App im Repo. Im Laufe der Zeit haben sich die Geschäftsanforderungen jedoch geändert. Aus einer App wurden zwei (eine ältere Version und ein erneutes Schreiben). Ein Webdienst wurde hinzugefügt. Für die drei Projekte wurden separate Zweige verwendet. Sie teilen jedoch keinen Code. Und so wäre es einfacher, sie in ihre eigenen Repos aufzuteilen.

Hundewetter
quelle

Antworten:

294

Ich habe mit der Idee von @ user292677 begonnen und sie verfeinert, um mein Problem zu lösen:

  1. Erstellen Sie das neue Repo in Github.
  2. CD zu Ihrer lokalen Kopie des alten Repos, aus dem Sie extrahieren möchten. Diese Kopie ist so eingerichtet, dass sie den Zweig des neuen Projekts verfolgt , der zum Master des neuen Repos wird .
  3. $ git push https://github.com/accountname/new-repo.git +new-project:master

Das neue Github-Repo ist fertig. Das Ergebnis ist;

  • ein neues Github-Repository namens new-repo ,
  • dessen masterentspricht dem neuen Projekt des alten Repos , mit
  • Alle Geschichte erhalten.

Tatsächlich stellte ich fest, dass ich mit dieser Methode das neue Repo mit einer handverlesenen Auswahl von Zweigen erstellen konnte, die wie gewünscht umbenannt wurden:

$ git push [email protected]:accountname/new_repo +new-project:master +site3a:rails3

Das Ergebnis ist, dass der bereits vorhandene Site3a- Zweig jetzt auch in das neue Repo verschoben wird und als Rails3 angezeigt wird . Das funktioniert sehr gut: Das Netzwerkdiagramm zeigt den neuen Master und die Rails3 mit vollständigem Verlauf und in ihrer korrekten Beziehung zueinander.

Update 07.12.2013: Wird bei einem anderen Projekt verwendet und überprüft, ob dieses Rezept noch funktioniert.

Update 2018-01-11: Schritt 3 aktualisiert, um die GitHub-Empfehlung für das https-Protokoll zu verwenden. Rezept funktioniert immer noch.

Hundewetter
quelle
Hallo @Dogweather, danke, dass du das geteilt hast. Können Sie erklären, was der Unterschied zwischen Ihrer Methode ist, und die Ursprungs-Remote-URL ändern, auf eine neue Repo-Methode umsteigen?
Vincent
5
Dogweather, ich habe Ihre Lösung mehr verwendet, als ich mich erinnern kann. Vielen Dank! Ich musste zuerst old_branch auschecken, bevor dies für mich funktionierte
Björn Theart
3
Beachten Sie, dass dadurch keine Tags kopiert werden. Ich glaube, Sie brauchen das vielleicht --follow-tags.
Faktor Mystic
1
Beachten Sie, dass Sie auf Github kein Repo erstellen müssen, sondern nur pushein lokales (dh git initanstelle von Github> Neu> ...)
OJFord
1
Ich möchte nicht meinen gesamten Commit-Verlauf in ein neues Repo übertragen, sondern nur Commits kopieren, die zum untergeordneten Repository gehören. Ist das möglich ??
Arbaz Rizvi
26

Aktualisieren:

CD zum lokalen Repo mit old_branch und:

$ git push https://github.com/accountname/new_repo.git +old_branch:master
Alexey Kislitsin
quelle
9
git clone -b new-project /path/to/repo /new/repo/path

Bearbeiten: In GitHub können Sie das Repo „gabeln“ und dann in Ihrem Klon zur Registerkarte „Admin“ wechseln. Unter "Repository-Name" und "Sichtbarkeit" befindet sich "Standardzweig" mit einem Dropdown-Menü mit Zweigen. Wählen Sie new-project.

Erneut bearbeiten: Ich habe gerade festgestellt, dass es sich um den masterZweig handelt, den Sie festlegen möchten, und nicht nur um den „Standard“ -Zweig. So…

  • Klonen Sie them/repoauf GitHub zu you/repo.
  • Lauf git clone [email protected]:you/repo.git
  • Starten Sie gitk.
  • [Möglicherweise möchten Sie einen old-masterZweig erstellen, damit Sie die alten Commits nicht aus den Augen verlieren.]
  • Suchen Sie das letzte Commit in der new-projectVerzweigung, klicken Sie mit der rechten Maustaste auf die Festschreibungsnachricht und wählen Sie "Master-Zweig auf hier zurücksetzen". (Sie können dies auch über die Befehlszeile mit tun git-reset, aber ich habe den richtigen Aufruf nicht herausgefunden.)

Ihr nächster Push-up zu Ihrem GitHub-Repo muss mit der --forceOption erfolgen, ansonsten sind Sie fertig.

Wenn es eines Ihrer eigenen Repos ist, tun Sie dies, um ...

  • Lauf git clone [email protected]:you/orig.git
  • Lauf git clone orig copy
  • copySetzen Sie den masterZweig wie oben beschrieben, jedoch innerhalb des lokalen Repos, an die gewünschte Stelle zurück.
  • Erstellen Sie das leere GitHub-Projekt you/copy. Befolgen Sie die Anweisungen auf GitHub, um dieses Projekt als Fernbedienung für Ihre lokale Version von einzurichten copy, zu pushen master, und fertig!
JC Salomon
quelle
Hmm! Ich bin mir nicht sicher, wie ich den ersten Schritt machen soll: ein Repo in Github klonen. Ich denke nicht, dass es möglich ist.
Dogweather
@ Dogweather, es heißt "Forking" auf GitHub; Ich habe meine Antwort aus Gründen der Klarheit bearbeitet.
JC Salomon
Ich konnte kein Repo innerhalb eines Kontos erstellen. Hast du das selbst versucht?
Dogweather
5
  1. Erstellen Sie das NEW_REPOSITORY in github.
  2. cd OLD_REPOSITORY
  3. git push https://github.com/accountname/NEW_REPO + master: master

Und das ist alles. (Hinweis: Git-Geschichte erhalten)

Ich hatte die obige Antwort ausprobiert und fand sie nicht spezifisch genug, da sie nicht + master: master spezifizierte, was ich brauchte, damit es funktionierte. Es funktioniert großartig.

Quelle (mit meinen Änderungen, um SSH-Probleme mit Github zu vermeiden): Mauricio Aiello, ehemaliger Java Senior Developer, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a -zweig-in-einem-vorhandenen-Repository

Joe
quelle
Das ist eigentlich nützlicher als die akzeptierte Antwort. Dies funktioniert auch in Situationen, in denen Git sich über src-Refspec-Fehler beschwert, wenn das alte nicht in das neue Repository verschoben werden kann.
Informagic
2

Ich bin mir nicht sicher, ob dies ein guter Weg ist, aber es ist trotzdem einfach:

git clone -b new-project [email protected]:User/YourProject.git newProjcet

Erstellen Sie dann ein neues Repo auf Github und drücken Sie es.

Kjuly
quelle
2

Denken Sie daran, dass Sie beim Erstellen eines neuen Repos den Bezug zum alten verlieren und es schwieriger machen, Aktualisierungen des ursprünglichen Projekts beizubehalten, die mit dem neuen synchronisiert sind. Vielleicht ist es nicht besser, das Repo zu teilen?

Julio Flores
quelle
0

Kleine Ergänzung zur richtigen Antwort:

$ git push [email protected]: accountname / new_repo + old_branch: master

"[email protected]: accountname / new_repo" => vom github-Pulldown-Menü "Klonen oder Herunterladen" abrufen

Gerd
quelle