Migrar un repositorio de un BitBucket Server local a GitHub

Si usas BitBucket en una instalación en local y en algún momento decides que quieres migrar a GitHub es posible que te surjan dudas sobre cómo hacer este movimiento de manera sencilla. Hoy me gustaría compartir contigo cómo se podría abordar este escenario.

Cómo crear un BitBucket Server de pruebas

Para montarme un laboratorio de pruebas con un BitBucket Server lo que he hecho ha sido usar mi querido Docker 🙂

#Create a BitBucket server using Docker
# 1. Create a volume
docker volume create --name bitbucketdata
# 2. Create a BitBucket server container
docker run --name="bitbucket" -d \
-v bitbucketdata:/var/atlassian/application-data/bitbucket \
-p 7990:7990 -p 7999:7999 atlassian/bitbucket

Una vez que el contenedor se está ejecutando, voy a la dirección http://localhost:7990 y configuro el servidor, en mi caso con una licencia de trial para empezar a trabajar.

Repositorio de ejemplo

Para mostrar un ejemplo con algo de chicha he importado uno que ya tenía varios commits:

commits del branch main

y branches:

branches del repositorio

el objetivo no es sólo migrar el branch main sino todos los demás en los que se está trabajando.

Creación del repositorio de destino en GitHub

Ahora que ya tenemos un repositorio en origen identificado, necesitamos crear uno en destino. Para ello basta con acceder a https://github.com/new. Elige un nombre para el repo de destino, no añadas ningún archivo de la sección de inicialización del repo, y haz clic en Create repository:

Crear un repositorio en GitHub.com

Importar el repositorio de Bitbucket on prem a GitHub

Si tuviéramos habilitado el acceso a este Bitbucket desde Internet podríamos hacer la importación de forma más fácil simplemente usando el botón Import code:

Importador de GitHub

Si no es el caso, estos son los comandos que deberías de utilizar para importarlo:

git clone --bare http://localhost:7990/scm/demo/repo-demo.git
cd repo-demo.git
git push --mirror https://github.com/0GiS0/demo-repo.git

El primero de los comandos, como puedes ver, no es un clonado «normal» sino que utilizo la opción –bare que significa que se realiza una copia del repositorio pero sin un directorio de trabajo. ¿Y qué significa esto? Pues que tiene toda la información del repo (todos los cambios, branches y demás) pero no está pensado para que trabajes con él. De hecho, esta carpeta tiene el sufijo .git para que se diferencie de los repos normales.
Luego simplemente accedemos a este directorio y dentro de él hacemos un push con la opción –mirror para subir al repositorio remoto, en este caso GitHub, toda la información que este contiene.

Una vez que ejecutamos los comandos, si vamos ahora a nuestro repo en GitHub verás que tienes todos los branches migrados:

Migrados todos los branches de Bitbucket a GitHub.png

así como todos los commits de estos:

Migrados todos los commits de los branches

¡Saludos!