Bifurcação do GitHub para Bitbucket


160

Estou trabalhando em um projeto baseado no CakePHP , hospedado no GitHub . Meu projeto está sendo hospedado no Bitbucket . Ambos usam git . Basicamente, eu gostaria de criar um 'fork' (não sei se estou usando os termos certos, pois sou novo no git ) do CakePHP no meu repositório Bitbucket, para poder obter as atualizações sem a necessidade de baixar todo o zip / tar do CakePHP e substituir a pasta, depois confirmar e enviar, mas talvez com uma 'mesclagem' (?).


5
Consulte stackoverflow.com/questions/1811730/… para obter uma boa abordagem para esse tipo de fluxo de trabalho.
Dolbz

@ Dolbz parece certo o que eu preciso, obrigado!
entropid

Respostas:


143

Não é possível enviar "solicitação de recebimento" em sites diferentes hoje. Adicionei uma solicitação de recurso para isso no rastreador de problemas do Bitbucket: # 3288 . Sugiro que você se adicione como seguidor, se quiser acompanhar isso.

No entanto, você ainda pode mover a fonte do GitHub para o Bitbucket sem precisar baixar nenhum arquivo zip ou tarballs. Você cria um clone do GitHub e envia para o Bitbucket:

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

Eu criei mg/cakephpcomo um repositório Git vazio no Bitbucket primeiro. Dessa forma, você pode enviar / alterar conjuntos de alterações do GitHub para o Bitbucket.


3
Então, como podemos puxar a montante?
Ruchir Shukla

1
@RuchirShukla: da mesma maneira, basicamente. Você precisa mover os commits através de sua própria máquina, puxando do seu upstream. Você então envia isso para o outro site de hospedagem, sincronizando os dois.
Martin Geisler

4
Isso funcionou muito bem para mim, exceto que eu precisava cd cakephpentre os dois comandos. Óbvio para não iniciantes, sim, mas os iniciantes podem se perguntar por que não está funcionando.
aaronbartell

Você pode fazer um vídeo do youtube para demonstrar isso? Não consegui replicar. Consegui executar essas instruções, mas quando pressiono e confirmo, ele ainda está tentando enviar ao mestre em vez do ramo bifurcado.
Cera

Isso não funciona como um fork. Ramos e Tags NÃO são copiados para o BitBucket.
Joel Karunungan

81

O fluxo de trabalho abaixo adiciona o repositório do github como um novo controle remoto chamado synce o bitbucket remoto como origin. Ele também adiciona um ramo chamado githubpara rastrear o repositório do github e um ramo chamado masterpara rastrear o repositório de bitbucket. Ele pressupõe que você tenha um repositório de bitbucket chamado "myrepository" que está vazio.

Remotos de instalação

# 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

Ramos de instalação

# 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

Agora você deve ter a githubfilial local rastreando a filial do repositório do github master. E você deve ter a masterfilial local rastreando o repositório de bitbucket ( masterfilial por padrão).

Isso facilita fazer um puxão na githubramificação, depois mesclar essas alterações na masterramificação (embora seja preferível rebase antes da mesclagem) e você pode empurrar a masterramificação (empurrará para bitbucket).


Isso não parece funcionar, mas é uma boa ideia. Enfim, consertá-lo para fazê-lo funcionar?
Bozdoz

A ramificação local do github rastreia a ramificação mestre remota do github e você envia para o mestre remoto do bitbucket? Quando o push para o github ocorre? @aleemb
bozdoz

1
O Git 2.2.1 --set-upstreamestá obsoleto ... Mas isso funciona desde que você crie a githubramificação antes de tentar definir o repositório upstream.
Ken Prince

3
Em vez de fazer --set-upstream do: git fetchegit branch --track github sync/master
Beaudinn Greve

3
Eu acho que o que está faltando é git checkout githube git checkout -b masterapós o comando git branch. Você vai acabar com esses ramos ( git branch -a): github, mestre, controles remotos / origin / master, controles remotos / sync / mestre
Klemens Zleptnig

31

Se você deseja manter seu repo atualizado, use dois controles remotos: Github ( upstream) e Bitbucket ( origin) como este:

# 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

Para obter atualizações do CakePHP no Github:

git pull upstream master

Para enviar suas alterações de código para Bitbucket:

git push origin master

Eu acho que você quis dizer `git clone mybitibucket / cakephp / cakephp` no primeiro git comando, certo? Este é o caminho a percorrer ....
Ribamar

Isso é ótimo! Muito obrigado! Muito apreciada
Aakanksha

Isso também não funciona. Ramos e Tags não estão incluídos no Bitbucket.
Joel Karunungan

@JoelKarunungan Good point! Para tudo o empurrão, incluindo ramos e rótulos, acho que isso deve funcionar: git push --all --mirror origin. Resposta atualizada.
Zubin

@Zubin você tentou isso? fatal: --all and --mirror are incompatible Além disso: git pull upstream mastergera um erro fatal. fatal: Couldn't find remote ref master
Joel Karunungan

15

Ao criar um novo repositório no BitBucket, clique no botão Import repositoryno canto superior direito. Insira o URL https encontrado ao clicar Clone or downloadno Github para o repositório que você deseja bifurcar.

Dê um nome ao seu repositório, defina suas configurações de privacidade e pronto!


1
Isso é clonagem, não bifurcação, o que é diferente.
entropid 25/05

7
O recurso está rotulado como 'Importar repositório' no Bitbucket, a partir de agora.
Wild Pottok

1
@entropid a fork é um clone do repositório original. No mundo git, Forking == clonagem
enorl76

@ enorl76 Mas não particularmente quando se trata de uso geral.
Rig

2
@ enorl76 sim tecnicamente é. Mas o fork é uma maneira de manter o clone "conectado" ao repositório original, para obter atualizações e eventualmente empurrá-lo. É aqui que a combinação de links 'origem' e 'montante' passa a desempenhar um papel fundamental. Github e Bitbucket então construiu toda uma série de ferramentas em torno do montante para fazer fork mais produtivo e amigável, como a coisa "push pedido" :)
Dan Niero

1

Percebi que desde a resposta de @Martin Geisler, o Bitbucket ativou um recurso para importar repositórios do github.com

Eu era capaz de importar com êxito um repo privado de github.com em um repo privado no bitbucket.org

Aqui estão os passos :

  1. Clique no botão Criar e selecione Repositório ('+'> Repositório)
  2. Agora, em vez de criar um novo repositório, selecione um repositório de importação no canto superior direito do modal que aparece.
  3. preencha o URL do repo do github e suas credenciais de autenticação no novo modal para importar o repositório.
  4. É isso aí. Tudo importa para o bitbucket do github sem problemas.

Observe o link do repositório de importação no canto superior direito da captura de tela


0

Eu acho que você só quer baixar facilmente o repositório com o seu projeto ... e que você NÃO estará contribuindo com o cakePHP, correto?

Nesse caso, você só precisa adicionar uma referência externa ao seu repositório.

SVN: equivalente externo em GIT?

E mais tarde, mesmo se você quiser contribuir com o cakePHP, basta fazê-lo no repositório original.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.