Forken des Git-Repositorys von GitHub zu GitLab

94

Angenommen, ich möchte einen Fix für ein Projekt einer anderen Person implementieren. Dieses Projekt befindet sich auf GitHub.

Ich könnte einen Fork auf GitHub erstellen und das Update implementieren.

Ich möchte meine Gabel jedoch lieber auf GitLab als auf GitHub erstellen.

Ist das möglich? Wie?

Ich habe diesen Artikel gelesen: https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

Wie auch immer, ich bin mir nicht sicher, was ich in meinem Fall tun soll.

  • Sollte ich einfach irgendwie eine Verzweigung auf GitLab des Projekts von GitHub erstellen?
  • Oder sollte ich einen GitLab-Spiegel des Projekts von GitHub erstellen?
  • Oder sollte ich einen Spiegel auf GitLab erstellen und dann den Spiegel teilen?
  • Oder soll ich etwas ganz anderes machen?

Was ist der richtige Ansatz.

Vielen Dank.

AKTUALISIEREN

Die Repository-Spiegelung auf GitLab ist wahrscheinlich nicht sinnvoll. Ich kann einen Spiegel meines MY GitHub-Repositorys in GitLab erstellen, aber ich kann keinen Spiegel eines Repositorys einer anderen Person erstellen.

https://docs.gitlab.com/ee/workflow/repository_mirroring.html

Folgendes habe ich bisher getan:

Ich habe das ursprüngliche GitHub-Projekt auf meinen lokalen Computer geklont. Ich habe den Fix für einen neuen Zweig in meinem lokalen Repository festgeschrieben. Ich habe ein leeres Projekt auf GitLab erstellt. Ich habe den Ursprung in meinem lokalen Repository auf dieses leere Projekt in GitLab festgelegt und beide Zweige in GitLab verschoben. Ich habe in meinem lokalen Repository Upstream zum GitHub-Repository eingerichtet.

Wenn ich neue Commits vom ursprünglichen GitHub-Repository in das Repository auf GitLab übertragen möchte (dh die Repositorys synchronisieren), kann ich dies mit meinem lokalen Repo als Zwischenschritt tun. Es gibt jedoch keine direkte Verbindung zwischen dem Repo auf GitHub und dem Repo auf GitLab. Ist mein Setup korrekt? Gibt es einen Unterschied, ob ich eine Gabel auf GitHub mache?

Cimlman
quelle

Antworten:

124

Wenn Sie nur Änderungen verfolgen möchten, erstellen Sie zunächst ein leeres Repository in GitLab (oder was auch immer Sie sonst verwenden) und klonen Sie es auf Ihren Computer.

Fügen Sie dann das GitHub-Projekt als " Upstream " -Fernbedienung hinzu mit:

git remote add upstream https://github.com/user/repo

Jetzt können Sie vom Upstream abrufen und ziehen, falls sich Änderungen ergeben. (Sie können es auch verschieben oder zusammenführen, wenn Sie über Zugriffsrechte verfügen.)

git pull upstream master

Zum Schluss kehren Sie zu Ihrem eigenen GitLab-Repository zurück:

git push origin master

Wenn Sie den Upstream- / Push-Ursprung nicht manuell abrufen möchten, bietet GitLab eine Spiegelungsfunktion unter Einstellungen => Repository => Spiegeln von Repositorys.

Chris Watts
quelle
15
Ich möchte diese Antwort nur ergänzen, warum dies der richtige Ansatz ist. "Forking" ist ein von GitHub erstelltes Konzept und existiert daher nur auf GitHub, was dennoch nützlich ist. Wenn Sie reines Git selbst in Betracht ziehen (wie einen reinen Git-Server, der irgendwo in Ihrem Netzwerk ausgeführt wird), bedeutet dies, dass Sie das Repo auf Ihren eigenen Server und dann auf Ihren lokalen Computer klonen. Sie würden dann das ursprüngliche Repo lokal als Upstream hinzufügen. Ich glaube, das macht GitHub hinter den Kulissen.
Bruno Finger
9
Ich will nur , dass Forking hinzufügen tut exist auf Gitlab finden hier zum Beispiel.
Bellackn
1
Ich musste verwenden: Pull Upstream Master - Allow-Un-Related-Histories
Hmojtaba
Wie senden Sie später eine Pull-Anfrage?
Erik Aronesty
1
@ErikAronesty Das ist schwieriger, da "Pull Requests" keine Git-Sache sind, sondern eine GitHub-Sache. Eine Möglichkeit, dies zu tun, besteht darin, eine Kopie auf GitHub zu teilen und Ihr gespaltenes Repo beispielsweise als eine andere Fernbedienung hinzuzufügen git remote add upstream-fork [email protected]:myuser/repo. Dann ist es nur noch eine Frage von git push upstream-fork masterund senden Sie Ihre Pull-Anfrage über die GitHub-Site.
Chris Watts
17

Der Nur-Browser-Weg:

  1. Erstellen Sie ein neues Projekt in Gitlab (Nur ein leeres Projekt mit einem Namen ist in Ordnung)
  2. Gehen Sie zu Einstellungen -> Repository
  3. Geben Sie die GitHub-URL unter "Repositorys spiegeln" ein.
  4. Stellen Sie sicher, dass "Spiegelrichtung" "Ziehen" ist.
  5. Klicken Sie auf die Schaltfläche 'Mirror Repository'
  6. Drücken Sie auf das Synchronisierungssymbol neben dem angezeigten Eintrag
aksh1618
quelle
Ich habe keine Enterprise Edition-Lizenz, dh ich kann "Spiegeln von Repositorys" aus Schritt 3 nicht sehen. Wenn ich eine solche Lizenz hätte, könnte ich einen Spiegel eines GitHub-Repositorys einer anderen Person erstellen?
Cimlman
1
@Cimlman Das ist seltsam, weil ich auch eine kostenlose Lizenz habe. Vielleicht noch einmal überprüfen? Sollte in 'Einstellungen-> Repository' an dritter Stelle stehen. Nur um es klar zu machen: die Einstellungen in der Seitenleiste, nicht das Profilmenü.
Aksh1618
Nachdem ich in der Seitenleiste auf Einstellungen -> Repository geklickt habe, werden die Abschnitte Geschützte Zweige, Geschützte Tags, Schlüssel bereitstellen, Token bereitstellen angezeigt.
Cimlman
2
@Cimlman Verwenden Sie eine benutzerdefinierte / lokale Gitlab-Instanz? Ich habe viele weitere Optionen in meinem persönlichen Basiskonto auf gitlab.com
aksh1618
1
Wir verwenden eine selbstverwaltete Installation, Version 10.7.2. Die neueste Version ist 11.6. OK, das ist ein guter Punkt. :) Ich kann Ihre Lösung nicht auf unserem GitLab testen. Jedenfalls ist das Problem für mich jetzt veraltet. Es ging um unsere benutzerdefinierte Fehlerbehebung für eine Bibliothek eines Drittanbieters. Die Fehlerbehebung wurde jedoch bereits in die offizielle Version dieser Bibliothek aufgenommen.
Cimlman
0

Das Verzweigen eines privaten Github-Repositorys ist möglich.

  1. Klicken Sie auf Neues Projekt
  2. Wählen Sie Importieren
  3. Wählen Sie Github
  4. OAuth2 dient zur Authentifizierung und automatischen Erstellung der Gitlab-App
  5. Wählen Sie das zu verzweigende Projekt aus

^ Ich habe dies gerade mit einem privaten Repo auf Github gemacht, das erfolgreich importiert wurde (inkl. Filialen usw.). Importiertes Projekt wird automatisch privat gehalten;)

Daithí
quelle
2
Für den Projektimport ist ein "Personal Access Token" erforderlich. Ich habe versucht, eine auf GitHub zu generieren. Es scheint, dass diese Funktion nützlich ist, wenn ich ein Projekt auf GitLab aus meinem Projekt auf GitHub erstellen möchte. Ist diese Annahme richtig? Bei der Frage geht es darum, ein GitHub-Projekt von jemand anderem zu forken.
Cimlman
2
-1, und wie im vorherigen Kommentar angegeben, geht es bei der Frage darum, ein Github-Projekt von jemand anderem zu forken. Die Anweisungen in dieser Antwort funktionieren in einem solchen Fall nicht.
Nikos Alexandris
1
@ NikosAlexandris bist du sicher? Können Sie kein Zugriffstoken für Ihr Konto erstellen und auf das Repo einer anderen Person zugreifen, auf die Sie Lesezugriff haben? (zum Beispiel jedes einzelne öffentliche Repo)
DGoiko
0

Anstatt zu gabeln, können Sie jedes öffentlich verfügbare GitHub-Repository nur über die Weboberfläche importieren:

  1. Klicken Sie in Ihrem GitLab-Dashboard auf Neues Projekt
  2. Wechseln Sie zur Registerkarte Projekt importieren
  3. Klicken Sie auf die Schaltfläche Repo by URL
  4. Füllen Sie die "Git-Repository-URL" und die verbleibenden Projektfelder aus
  5. Klicken Sie auf Projekt erstellen , um den Importvorgang zu starten
  6. Sobald Sie fertig sind, werden Sie zu Ihrem neu erstellten Projekt weitergeleitet

Diese Technik wurde kürzlich verwendet und funktioniert in jedem öffentlichen Repository auch ohne GitHub-Konto. Auf dieser GitLab-Dokumentenseite finden Sie die Informationsquelle.

Koceka
quelle
1
OK. Und wenn neue Commits zum ursprünglichen Repository auf GitHub hinzugefügt werden, kann ich die Änderungen einfach zum Repository auf GitHub zusammenführen? Dies ist eine schwierige Operation und kann möglicherweise nicht ohne ein Zwischen-Repository durchgeführt werden (siehe letzter Absatz der Frage).
Cimlman