Bifurcación de GitHub a Bitbucket

160

Estoy trabajando en un proyecto basado en CakePHP , alojado en GitHub . Mi proyecto está alojado en Bitbucket . Ambos usan git . Básicamente me gustaría crear un 'fork' (no sé si estoy usando los términos correctos, ya que soy nuevo en git ) de CakePHP en mi repositorio de Bitbucket, para poder obtener las actualizaciones sin la necesidad de descargar todo el zip / tar de CakePHP y reemplazar la carpeta, luego confirmar y presionar, pero tal vez con una 'fusión' (?).

entropida
fuente
55
Consulte stackoverflow.com/questions/1811730/… para obtener un buen enfoque de este tipo de flujo de trabajo.
Dolbz
@Dolbz parece correcto lo que necesito, ¡gracias!
entropid

Respuestas:

143

Hoy no es posible enviar "solicitud de extracción" a través de diferentes sitios. He agregado una solicitud de función para esto en el rastreador de problemas de Bitbucket: # 3288 . Le sugiero que se agregue como seguidor si desea realizar un seguimiento de esto.

Sin embargo, aún puede mover la fuente de GitHub a Bitbucket sin tener que descargar ningún archivo zip o tarballs. Haces un clon de GitHub y presionas a Bitbucket:

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

mg/cakephpPrimero creé como un repositorio Git vacío en Bitbucket. De esa manera, puede empujar / extraer conjuntos de cambios de GitHub a Bitbucket.

Martin Geisler
fuente
3
Entonces, ¿cómo podemos sacar de la corriente?
Ruchir Shukla
1
@RuchirShukla: básicamente de la misma manera. Tienes que mover los commits a través de tu propia máquina tirando de tu upstream. Luego empuja eso al otro sitio de alojamiento, sincronizando así los dos.
Martin Geisler
44
Esto funcionó muy bien para mí, excepto que necesitaba cd cakephpentre los dos comandos. Obvio para los no principiantes, sí, pero los principiantes pueden preguntarse por qué no está funcionando.
aaronbartell
¿Puedes hacer un video de YouTube para demostrarlo? No pude replicarlo. Pude hacer estas instrucciones, pero cuando presiono y me comprometo, todavía intenta llevarlo al maestro en lugar de a la rama bifurcada.
Cera
Esto no funciona como a fork. Las ramas y etiquetas NO se copian en BitBucket.
Joel Karunungan el
81

El siguiente flujo de trabajo agrega el repositorio de github como un nuevo control remoto llamado syncy el control remoto bitbucket como origin. También agrega una rama llamada githubpara rastrear el repositorio de github y una rama llamada masterpara rastrear el repositorio de bitbucket. Se supone que tiene un repositorio de bitbucket llamado "myrepository" que está vacío.

Configurar controles remotos

# 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

Configurar ramas

# 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

Ahora debe hacer que la githubsucursal local rastree la mastersucursal del repositorio de github . Y debe hacer que la mastersucursal local rastree el repositorio de bitbucket ( mastersucursal por defecto).

Esto hace que sea más fácil tirar de la githubrama, luego fusionar esos cambios en la masterrama (sin embargo, se prefiere rebase sobre la combinación) y luego puede empujar la masterrama (la empujará a bitbucket).

aleemb
fuente
Esto no parece funcionar, pero es una buena idea. ¿De alguna manera arreglarlo para que funcione?
bozdoz
La rama local de github rastrea la rama maestra remota de github, ¿luego empuja al maestro remoto de bitbucket? ¿Cuándo ocurre el empuje a github? @aleemb
bozdoz
1
En Git 2.2.1 --set-upstreamestá en desuso ... Pero esto funciona siempre que cree la githubrama antes de intentar establecer el repositorio ascendente.
Ken Prince
3
En lugar de hacer --set-upstream do: git fetchygit branch --track github sync/master
Beaudinn Greve
3
Creo que lo que falta es git checkout githuby git checkout -b masterdespués del comando git branch. Terminarás con esas ramas ( git branch -a): github, master, remotes / origin / master, remotes / sync / master
Klemens Zleptnig
31

Si desea mantener actualizado su repositorio, use dos controles remotos: Github ( upstream) y Bitbucket ( origin) de esta manera:

# 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 obtener actualizaciones de CakePHP desde Github:

git pull upstream master

Para enviar los cambios de código a Bitbucket:

git push origin master
Zubin
fuente
Creo que quisiste decir `git clone mybitibucket / cakephp / cakephp` en el primer git comando, ¿verdad? Este es el camino a seguir ...
ribamar
¡Esto es simplemente genial! ¡Gracias una tonelada! Muy apreciado
Aakanksha
Esto tampoco funciona. Las ramas y las etiquetas no están incluidas en Bitbucket.
Joel Karunungan el
@JoelKarunungan ¡Buen punto! Para empujar todo, incluyendo las ramas y etiquetas, creo que esto debería funcionar: git push --all --mirror origin. Respuesta actualizada
Zubin
@Zubin, ¿intentaste esto? fatal: --all and --mirror are incompatible Además: git pull upstream masterarroja un error fatal. fatal: Couldn't find remote ref master
Joel Karunungan
15

Al crear un nuevo repositorio en BitBucket, haga clic en el botón Import repositoryen la esquina superior derecha. Ingrese la URL https que se encuentra al hacer clic Clone or downloaden Github para el repositorio que desea bifurcar.

Dale un nombre a tu repositorio, configura tu configuración de privacidad y ¡listo!

shmuli
fuente
1
Eso es clonar, no bifurcar, que es algo diferente.
entropid
77
La característica está etiquetada como 'Importar repositorio' en Bitbucket, a partir de ahora.
Wild Pottok
1
@entropid un tenedor es un clon del repositorio original. En el mundo git, Forking == clonación
enorl76
@ enorl76 No particularmente cuando se trata de uso general.
Aparejo
2
@ enorl76 sí técnicamente lo es. Pero fork es una forma de mantener el clon "conectado" al repositorio original para obtener actualizaciones de él y, finalmente, presionarlo. Aquí es donde la combinación de enlaces 'origen' y 'aguas arriba' juega un papel fundamental. Luego, Github y Bitbucket construyeron un conjunto de herramientas alrededor de la cadena para hacer que Fork sea más productivo y amigable, como la "solicitud de inserción" :)
Dan Niero
1

He notado que desde la respuesta de @Martin Geisler, Bitbucket ha habilitado una función para importar repositorios desde github.com

Pude importar con éxito un repositorio privado de github.com a un repositorio privado en bitbucket.org

Aquí están los pasos :

  1. Haga clic en el botón Crear y seleccione Repositorio ('+'> Repositorio)
  2. Ahora, en lugar de crear un nuevo repositorio, seleccione un repositorio de importación en la esquina superior derecha del modal que aparece.
  3. complete la URL de su repositorio de github y sus credenciales de autenticación en el nuevo modal para importar el repositorio.
  4. Eso es. Todo se importa en bitbucket desde github sin problemas.

Tenga en cuenta el enlace del repositorio de importación en la esquina superior derecha de la captura de pantalla

de1123bu58nk
fuente
0

Supongo que solo quieres descargar fácilmente el repositorio con tu proyecto ... y que NO contribuirás con cakePHP, ¿correcto?

si es así, solo necesita agregar una referencia externa a su repositorio.

SVN: equivalentes externos en GIT?

Y más tarde, incluso si desea contribuir a cakePHP, puede hacerlo en el repositorio original muy bien.

gcb
fuente