Forking von GitHub zu Bitbucket

160

Ich arbeite an einem Projekt, das auf CakePHP basiert und auf GitHub gehostet wird . Mein Projekt wird auf Bitbucket gehostet . Beide benutzen Git . Grundsätzlich möchte ich in meinem Bitbucket-Repository eine 'Gabel' (ich weiß nicht, ob ich die richtigen Begriffe verwende, da ich neu bei git bin ) von CakePHP erstellen, um die Updates erhalten zu können ohne dass Sie alle CakePHP zip / tar herunterladen und den Ordner ersetzen müssen, dann festschreiben und pushen müssen, aber möglicherweise mit einem 'Merge' (?).

Entropid
quelle
5
Unter stackoverflow.com/questions/1811730/… finden Sie einen guten Ansatz für diese Art von Workflow.
Dolbz
@Dolbz es scheint richtig was ich brauche, danke!
Entropid

Antworten:

143

Es ist heute nicht möglich, "Pull-Anfragen" über verschiedene Sites zu senden. Ich habe im Bitbucket Issue Tracker eine Feature-Anfrage dazu hinzugefügt: # 3288 . Ich schlage vor, Sie fügen sich als Follower hinzu, wenn Sie dies verfolgen möchten.

Sie können die Quelle jedoch weiterhin von GitHub nach Bitbucket verschieben, ohne Zip-Dateien oder Tarballs herunterladen zu müssen. Sie erstellen einen Klon von GitHub und drücken auf Bitbucket:

$ git clone https://github.com/cakephp/cakephp
$ cd cakephp
$ git push [email protected]:mg/cakephp.git master

Ich habe zuerst mg/cakephpals leeres Git-Repository in Bitbucket erstellt. Auf diese Weise können Sie Änderungssätze von GitHub nach Bitbucket verschieben.

Martin Geisler
quelle
3
Wie können wir dann aus dem Upstream ziehen?
Ruchir Shukla
1
@RuchirShukla: im Grunde genauso. Sie müssen die Commits durch Ihre eigene Maschine verschieben, indem Sie sie von Ihrem Upstream ziehen. Sie schieben das dann auf die andere Hosting-Site und synchronisieren so die beiden.
Martin Geisler
4
Dies funktionierte großartig für mich, außer dass ich cd cakephpzwischen den beiden Befehlen liegen musste. Natürlich für Nicht-Anfänger, ja, aber Anfänger fragen sich vielleicht, warum es nicht funktioniert.
Aaronbartell
Kannst du ein Youtube-Video davon machen, um es zu demonstrieren? Ich konnte es nicht replizieren. Ich konnte diese Anweisungen ausführen, aber wenn ich pushe und festschreibe, wird immer noch versucht, sie an den Master anstatt an den gegabelten Zweig zu pushen.
Wachs
Dies funktioniert nicht als fork. Zweige und Tags werden NICHT nach BitBucket kopiert.
Joel Karunungan
81

Der folgende Workflow fügt das Github-Repository als eine neu aufgerufene Fernbedienung syncund die Bitbucket-Fernbedienung als hinzu origin. Außerdem wird ein Zweig githubhinzugefügt, der aufgerufen wird , um das Github-Repository zu verfolgen, und ein Zweig, der aufgerufen wird master, um das Bitbucket-Repository zu verfolgen. Es wird davon ausgegangen, dass Sie ein Bitbucket-Repository namens "myrepository" haben, das leer ist.

Fernbedienungen einrichten

# setup local repo
mkdir myrepository
cd myrepository
git init

# add  bitbucket remote as "origin"
git remote add origin ssh://[email protected]/aleemb/myrepository.git

# add github remote as "sync"
git remote add sync https://github.com/aleemb/laravel.git

# verify remotes
git remote -v
# should show fetch/push for "origin" and "sync" remotes

Zweige einrichten

# first pull from github using the "sync" remote
git pull sync

# setup local "github" branch to track "sync" remote's "master" branch
git branch --track github sync/master

# switch to the new branch
git checkout github

# create new master branched out of github branch
git checkout -b master

# push local "master" branch to "origin" remote (bitbucket)
git push -u origin master

Jetzt sollte der lokale githubZweig den Zweig des Github-Repos verfolgen master. Und der lokale masterZweig sollte das Bitbucket-Repo verfolgen ( masterstandardmäßig verzweigen).

Dies macht es einfach, am githubZweig zu ziehen, diese Änderungen dann auf dem masterZweig zusammenzuführen (Rebase wird jedoch dem Zusammenführen vorgezogen), und dann können Sie den masterZweig verschieben (wird auf Bitbucket verschoben).

Aleemb
quelle
Das scheint nicht zu funktionieren, aber es ist eine gute Idee. Wie auch immer, um es zu reparieren, damit es funktioniert?
Bozdoz
Der lokale Github-Zweig verfolgt den Remote-Github-Master-Zweig. Drücken Sie dann auf den Remote-Bitbucket-Master? Wann erfolgt der Push-to-Github? @aleemb
Bozdoz
1
In Git ist 2.2.1 --set-upstreamveraltet ... Dies funktioniert jedoch, solange Sie den githubZweig erstellen, bevor Sie versuchen, das Upstream-Repo festzulegen.
Ken Prince
3
Anstatt --set-upstream zu tun: git fetchundgit branch --track github sync/master
Beaudinn Greve
3
Ich denke, was fehlt, ist git checkout githubund git checkout -b masternach dem Befehl git branch. Sie werden mit diesen Zweigen ( git branch -a) enden: Github, Master, Fernbedienungen / Ursprung / Master, Fernbedienungen / Synchronisierung / Master
Klemens Zleptnig
30

Wenn Sie Ihr Repo auf dem neuesten Stand halten möchten, verwenden Sie zwei Fernbedienungen: Github ( upstream) und Bitbucket ( origin) wie folgt :

# Clone original CakePHP source code from Github
git clone --mirror https://github.com/cakephp/cakephp
cd cakephp
# Rename remote from `origin` to `upstream`
git remote rename origin upstream
# Add your Bitbucket repo (this is where your code will be pushed)
git remote add origin https://bitbucket/your/repo.git
# Push everything to Bitbucket
git push --mirror origin

So rufen Sie Updates für CakePHP von Github ab:

git pull upstream master

So übertragen Sie Ihre Codeänderungen auf Bitbucket:

git push origin master
Zubin
quelle
Ich denke, Sie meinten im ersten Befehl "Git Clone Mybitibucket / Cakephp / Cakephp " git, oder? Dies ist der
richtige
Das ist einfach toll! Danke vielmals!
Sehr
Dies funktioniert auch nicht. Zweige und Tags sind in Bitbucket nicht enthalten.
Joel Karunungan
@ JoelKarunungan Guter Punkt! Um alles zu pushen, einschließlich Zweige und Tags, denke ich, dass dies funktionieren sollte : git push --all --mirror origin. Antwort aktualisiert.
Zubin
@ Zubin hast du das versucht? fatal: --all and --mirror are incompatible Außerdem: git pull upstream masterWirft einen schwerwiegenden Fehler aus. fatal: Couldn't find remote ref master
Joel Karunungan
15

Klicken Sie beim Erstellen eines neuen Repositorys in BitBucket auf die Schaltfläche Import repositoryoben rechts. Geben Sie die https-URL ein, die Sie gefunden haben, wenn Sie Clone or downloadin Github auf das Repository klicken, das Sie teilen möchten.

Geben Sie Ihrem Repository einen Namen, konfigurieren Sie Ihre Datenschutzeinstellungen und los geht's!

shmuli
quelle
1
Das ist Klonen, nicht Gabeln, was etwas anderes ist.
Entropid
6
Die Funktion ist ab sofort in Bitbucket als "Repository importieren" gekennzeichnet.
Wild Pottok
1
@entropid a fork ist ein Klon des ursprünglichen Repos. In der Git-Welt, Forking == Klonen
enorl76
@ enorl76 Nicht besonders im allgemeinen Gebrauch.
Rig
1
@ enorl76 ja technisch ist es. Aber Fork ist eine Möglichkeit, den Klon mit dem ursprünglichen Repository "verbunden" zu halten, um Updates von ihm zu erhalten und ihn schließlich weiter zu verschieben. Hier spielt die Kombination von "Ursprung" und "vorgelagerten" Verbindungen eine grundlegende Rolle. Github und Bitbucket bauten dann alle Werkzeuge rund um den Upstream, um die Gabel produktiver und freundlicher zu machen, wie das "Push Request"
-Ding
1

Ich habe festgestellt, dass Bitbucket seit der Antwort von @Martin Geisler eine Funktion zum Importieren von Repositorys von github.com aktiviert hat

Ich konnte ein privates Repo von github.com erfolgreich in ein privates Repo auf bitbucket.org importieren

Hier sind die Schritte :

  1. Klicken Sie auf die Schaltfläche Erstellen und wählen Sie Repository ('+'> Repository).
  2. Anstatt jetzt ein neues Repository zu erstellen, wählen Sie jetzt ein Import-Repository in der oberen rechten Ecke des angezeigten Modals aus.
  3. Geben Sie die URL Ihres Github-Repos und Ihre Authentifizierungsdaten für das neue Modal zum Importieren des Repositorys ein.
  4. Das ist es. Alles wird reibungslos von Github in Bitbucket importiert.

Beachten Sie den Link zum Import-Repository in der rechten oberen Ecke des Screenshots

de1123bu58nk
quelle
0

Ich vermute, Sie möchten einfach nur das Repository mit Ihrem Projekt herunterladen ... und Sie werden NICHT das CakePHP beisteuern, richtig?

In diesem Fall müssen Sie Ihrem Repo lediglich einen externen Verweis hinzufügen.

SVN: Externes Äquivalent in GIT?

Und später, auch wenn Sie zu cakePHP beitragen möchten, können Sie dies beim ursprünglichen Repo ganz gut tun.

gcb
quelle