Passer de GitHub à Bitbucket

161

Je travaille sur un projet basé sur CakePHP , hébergé sur GitHub . Mon projet est hébergé sur Bitbucket . Les deux utilisent git . En gros, j'aimerais créer un 'fork' (je ne sais pas si j'utilise les bons termes, puisque je suis nouveau sur git ) de CakePHP dans mon référentiel Bitbucket, afin de pouvoir obtenir les mises à jour sans avoir besoin de télécharger tout le zip / tar de CakePHP et de remplacer le dossier, puis de valider et de pousser, mais peut-être avec un 'merge' (?).

entropide
la source
5
Voir stackoverflow.com/questions/1811730/… pour une bonne approche de ce type de flux de travail.
Dolbz
@Dolbz il me semble juste ce dont j'ai besoin, merci!
entropid

Réponses:

144

Il n'est pas possible d'envoyer une "pull request" sur différents sites aujourd'hui. J'ai ajouté une demande de fonctionnalité pour cela dans le suivi des problèmes Bitbucket: # 3288 . Je vous suggère de vous ajouter en tant que suiveur si vous souhaitez suivre cela.

Cependant, vous pouvez toujours déplacer la source de GitHub vers Bitbucket sans avoir à télécharger de fichiers zip ou de tarballs. Vous créez un clone à partir de GitHub et poussez vers Bitbucket:

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

J'ai d'abord créé mg/cakephpun référentiel Git vide dans Bitbucket. De cette façon, vous pouvez pousser / extraire des ensembles de modifications de GitHub vers Bitbucket.

Martin Geisler
la source
3
Alors comment pouvons-nous tirer de l'amont?
Ruchir Shukla
1
@RuchirShukla: de la même manière, en gros. Vous devez déplacer les commits via votre propre machine en tirant de votre amont. Vous le transmettez ensuite à l'autre site d'hébergement, synchronisant ainsi les deux.
Martin Geisler
4
Cela a très bien fonctionné pour moi sauf que je devais cd cakephpentre les deux commandes. Évident pour les non-débutants, oui, mais les débutants pourraient se demander pourquoi cela ne fonctionne pas.
aaronbartell
Pouvez-vous en faire une vidéo sur YouTube pour le démontrer? Je n'ai pas pu le reproduire. J'ai pu suivre ces instructions, mais lorsque je pousse et m'engage, il essaie toujours de le pousser vers le maître au lieu de la branche fourchue.
Cire du
Cela ne fonctionne pas comme un fichier fork. Les branches et les balises ne sont PAS copiées sur BitBucket.
Joel Karunungan
81

Le flux de travail ci-dessous ajoute le référentiel github en tant que nouvelle télécommande appelée syncet la télécommande bitbucket en tant que origin. Il ajoute également une branche appelée githubpour suivre le référentiel github et une branche appelée masterpour suivre le référentiel bitbucket. Cela suppose que vous avez un référentiel bitbucket appelé "myrepository" qui est vide.

Configurer les télécommandes

# 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

Configurer les branches

# 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

Vous devriez maintenant avoir la githubbranche locale qui suit la branche du dépôt github master. Et vous devriez avoir la masterbranche locale qui suit le dépôt bitbucket ( masterbranche par défaut).

Cela facilite le tirage sur la githubbranche, puis la fusion de ces modifications sur la masterbranche (rebase préféré à la fusion) et vous pouvez ensuite pousser la masterbranche (la poussera vers bitbucket).

Aleemb
la source
Cela ne semble pas fonctionner mais c'est une bonne idée. Quoi qu'il en soit, le réparer pour le faire fonctionner?
bozdoz
La branche github locale suit la branche principale github distante, puis vous poussez vers le maître bitbucket distant? Quand la poussée vers github se produit-elle? @aleemb
bozdoz
1
Dans Git 2.2.1 --set-upstreamest obsolète ... Mais cela fonctionne tant que vous créez la githubbranche avant d'essayer de définir le dépôt en amont.
Ken Prince
3
Au lieu de faire --set-upstream, faites: git fetchetgit branch --track github sync/master
Beaudinn Greve
3
Je pense que ce qui manque est git checkout githubet git checkout -b masteraprès la commande git branch. Vous vous retrouverez avec ces branches ( git branch -a): github, master, remotes / origin / master, remotes / sync / master
Klemens Zleptnig
31

Si vous souhaitez garder votre dépôt à jour, utilisez deux télécommandes: Github ( upstream) et Bitbucket ( origin) comme ceci:

# 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

Pour extraire les mises à jour de CakePHP depuis Github:

git pull upstream master

Pour transmettre vos modifications de code à Bitbucket:

git push origin master
Zubin
la source
Je pense que vous vouliez dire `git clone mybitibucket / cakephp / cakephp` dans la première git commande, non? C'est la voie à suivre ....
ribamar
C'est tout simplement génial! Merci beaucoup! Très apprécié
Aakanksha
Cela ne fonctionne pas non plus. Les branches et les balises ne sont pas incluses dans Bitbucket.
Joel Karunungan
@JoelKarunungan Bon point! Pour pousser tout, y compris les branches et les étiquettes, je pense que cela devrait fonctionner: git push --all --mirror origin. Réponse mise à jour.
Zubin
@Zubin avez-vous essayé ça? fatal: --all and --mirror are incompatible Aussi: git pull upstream mastergénère une erreur fatale. fatal: Couldn't find remote ref master
Joel Karunungan
14

Lors de la création d'un nouveau référentiel dans BitBucket, cliquez sur le bouton Import repositoryen haut à droite. Entrez l'url https trouvée lorsque vous cliquez Clone or downloaddans Github pour le référentiel que vous souhaitez créer.

Donnez un nom à votre référentiel, configurez vos paramètres de confidentialité, et c'est parti!

shmuli
la source
1
C'est du clonage, pas du fork, ce qui est différent.
entropide
7
La fonctionnalité est nommée 'Importer le référentiel' sur Bitbucket, à partir de maintenant.
Wild Pottok
1
@entropid a fork est un clone du repo d'origine. Dans le monde git, Forking == cloning
enorl76
@ enorl76 Pas particulièrement quand il s'agit d'une utilisation générale.
Rig du
2
@ enorl76 oui techniquement ça l'est. Mais fork est un moyen de garder le clone "connecté" au référentiel d'origine afin d'en obtenir la mise à jour et éventuellement de le pousser. C'est là que la combinaison des liens «d'origine» et «en amont» en vient à jouer un rôle fondamental. Github et Bitbucket ont ensuite construit tout un ensemble d'outils autour de l'amont pour rendre le fork plus productif et convivial, comme le truc "push request" :)
Dan Niero
0

Je suppose que vous voulez simplement télécharger facilement le référentiel avec votre projet ... et que vous ne contribuerez PAS au cakePHP, n'est-ce pas?

si tel est le cas, il vous suffit d'ajouter une référence externe à votre dépôt.

SVN: équivalent externe dans GIT?

Et plus tard, même si vous souhaitez contribuer à cakePHP, vous pouvez simplement le faire dans le dépôt d'origine.

gcb
la source
0

J'ai remarqué que depuis la réponse de @Martin Geisler, Bitbucket a activé une fonctionnalité permettant d'importer des référentiels depuis github.com

J'ai réussi à importer un dépôt privé de github.com dans un dépôt privé sur bitbucket.org

Voici les étapes :

  1. Cliquez sur le bouton Créer et sélectionnez Référentiel ('+'> Référentiel)
  2. Maintenant, au lieu de créer un nouveau référentiel, sélectionnez un référentiel d'importation dans le coin supérieur droit du modal qui apparaît.
  3. renseignez l'URL de votre référentiel github et vos informations d'authentification sur le nouveau modal pour l'importation du référentiel.
  4. C'est tout. Tout est importé en douceur dans bitbucket depuis github.

Notez le lien du référentiel d'importation dans le coin supérieur droit de la capture d'écran

de1123bu58nk
la source