Forking da GitHub a Bitbucket


161

Sto lavorando a un progetto basato su CakePHP , ospitato su GitHub . Il mio progetto è ospitato su Bitbucket . Entrambi usano git . Fondamentalmente mi piacerebbe creare un 'fork' (non so se sto usando i termini giusti, dato che sono nuovo a git ) di CakePHP nel mio repository Bitbucket, al fine di poter ottenere gli aggiornamenti senza la necessità di scaricare tutto il file zip / tar di CakePHP e sostituire la cartella, quindi eseguire il commit e il push, ma forse con un 'unione' (?).


5
Vedi stackoverflow.com/questions/1811730/… per un buon approccio a questo tipo di flusso di lavoro.
Dolbz,

@Dolbz sembra giusto quello di cui ho bisogno, grazie!
entropid

Risposte:


144

Oggi non è possibile inviare una "richiesta pull" tra diversi siti. Ho aggiunto una richiesta di funzionalità per questo nel tracker dei problemi di Bitbucket: # 3288 . Ti suggerisco di aggiungerti come follower se vuoi seguirlo.

Tuttavia, puoi comunque spostare l'origine da GitHub a Bitbucket senza dover scaricare file zip o tarball. Fai un clone da GitHub e spingi su Bitbucket:

$ git clone https://github.com/cakephp/cakephp
$ cd cakephp
$ git push git@bitbucket.org:mg/cakephp.git master

Ho creato prima mg/cakephpcome repository Git vuoto in Bitbucket. In questo modo puoi spingere / estrarre i changeset da GitHub a Bitbucket.


3
Allora come possiamo tirare dall'upstream?
Ruchir Shukla,

1
@RuchirShukla: allo stesso modo, sostanzialmente. Devi spostare i commit attraverso la tua macchina tirando dal tuo monte. Quindi lo spingi sull'altro sito di hosting, sincronizzando così i due.
Martin Geisler,

4
Questo ha funzionato benissimo per me, tranne per il fatto che avevo bisogno di cd cakephpintercettare i due comandi. Ovvio per i non principianti, sì, ma i principianti potrebbero chiedersi perché non funziona.
aaronbartell,

Puoi fare un video su YouTube di questo per dimostrarlo? Non sono riuscito a replicarlo. Sono stato in grado di fare queste istruzioni ma quando spingo e commetto, sto ancora cercando di spingerlo al master invece del ramo biforcuto.
Cera,

Questo non funziona come a fork. Filiali e tag NON vengono copiati su BitBucket.
Joel Karunungan,

81

Il flusso di lavoro seguente aggiunge il repository github come un nuovo telecomando chiamato synce il bitbucket remoto come origin. Aggiunge anche un ramo chiamato githubper tenere traccia del repository github e un ramo chiamato masterper tenere traccia del repository bitbucket. Presuppone che tu abbia un repository bitbucket chiamato "myrepository" che è vuoto.

Telecomandi di installazione

# setup local repo
mkdir myrepository
cd myrepository
git init

# add  bitbucket remote as "origin"
git remote add origin ssh://git@bitbucket.org/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

Configura rami

# 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

Ora dovresti avere il githubramo locale che tiene traccia del ramo del repository github master. E dovresti avere il masterramo locale che tiene traccia del repo bitbucket ( masterramo per impostazione predefinita).

Questo rende facile fare un pull sul githubramo, quindi unire quelle modifiche sul masterramo (rebase preferisce unire però) e quindi puoi spingere il masterramo (lo spingerà in bitbucket).


Questo non sembra funzionare ma è una buona idea. In ogni caso per risolverlo per farlo funzionare?
Bozdoz,

Il ramo github locale tiene traccia del ramo master github remoto, quindi si passa al master bitbucket remoto? Quando si verifica la spinta a github? @aleemb
bozdoz,

1
In Git 2.2.1 --set-upstreamè obsoleto ... Ma funziona finché si crea il githubramo prima di provare a impostare il repository upstream.
Ken Prince,

3
Invece di fare --set-upstream do: git fetchegit branch --track github sync/master
Beaudinn Greve il

3
Penso che manchi git checkout githube git checkout -b masterdopo il comando git branch. git branch -a
Finirai

31

Se vuoi mantenere aggiornato il tuo repository, usa due telecomandi: Github ( upstream) e Bitbucket ( origin) in questo modo:

# 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

Per estrarre gli aggiornamenti di CakePHP da Github:

git pull upstream master

Per inviare le modifiche al codice in Bitbucket:

git push origin master

Penso che tu abbia significato "git clone mybitibucket / cakephp / cakephp " nel primo git comando, giusto? Questa è la strada da percorrere ....
Ribamar,

Questo è semplicemente fantastico! Grazie mille! Molto apprezzato
Aakanksha

Anche questo non funziona. Filiali e tag non sono inclusi in Bitbucket.
Joel Karunungan,

@JoelKarunungan Ottimo punto! Per tutto spinta, incluse le filiali e tag, credo che questo dovrebbe funzionare: git push --all --mirror origin. Risposta aggiornata
Zubin,

@Zubin hai provato questo? fatal: --all and --mirror are incompatible Inoltre: git pull upstream mastergenera un errore fatale. fatal: Couldn't find remote ref master
Joel Karunungan,

14

Quando si crea un nuovo repository in BitBucket, fare clic sul pulsante Import repositoryin alto a destra. Immettere l'URL https trovato quando si fa clic Clone or downloadsu Github per il repository che si desidera eseguire il fork.

Dai un nome al tuo repository, configura le tue impostazioni sulla privacy e il gioco è fatto!


1
È clonazione, non biforcazione, che è una cosa diversa.
entropid

7
La funzione è etichettata 'Importa repository' su Bitbucket, al momento.
Wild Pottok,

1
@entropid a fork è un clone del repository originale. Nel mondo git, Forking == clonazione
enorl76,

@ enorl76 Non particolarmente quando si tratta di uso generale.
Rig

2
@ enorl76 sì tecnicamente lo è. Ma fork è un modo per mantenere il clone "connesso" al repository originale in modo da ottenere l'aggiornamento da esso e alla fine spingerlo. È qui che la combinazione di collegamenti "origine" e "a monte" assume un ruolo fondamentale. Github e Bitbucket hanno quindi creato una serie di strumenti attorno all'upstream per rendere la forcella più produttiva e amichevole, come la cosa della "richiesta push" :)
Dan Niero,

0

Immagino che desideri semplicemente scaricare facilmente il repository con il tuo progetto ... e che NON contribuirai con il cakePHP, giusto?

in tal caso, è sufficiente aggiungere un riferimento esterno al repository.

SVN: equivalente esterno in GIT?

E in seguito, anche se vuoi contribuire a cakePHP, puoi semplicemente farlo nel repository originale.


0

Ho notato che dalla risposta di @Martin Geisler, Bitbucket ha abilitato una funzione per importare repository da github.com

Sono stato in grado di importare con successo un repository privato da github.com in un repository privato su bitbucket.org

Ecco i passaggi :

  1. Fai clic sul pulsante Crea e seleziona Repository ('+'> Repository)
  2. Ora, invece di creare un nuovo repository, seleziona un repository di importazione dall'angolo in alto a destra del modale che si apre.
  3. inserire l'URL del repository github e le credenziali di autenticazione sul nuovo modale per l'importazione del repository.
  4. Questo è tutto. Tutto viene importato in bitbucket da github senza problemi.

Nota il collegamento al repository di importazione nell'angolo in alto a destra dello screenshot

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.