2012-09-13 11 views
5

Actualmente estoy evaluando opciones para los servicios de alojamiento de repositorios de Git para mi equipo. Soy parcial a utilizar GitHub, pero puede haber razones por las que, en su lugar (o además), desearíamos utilizar Stash de Atlassian.Migrando hosts de Git

¿Con Git es posible copiar un repositorio y su historial del servicio de alojamiento a otro? ¿Hay algún problema con hacer esto? Si bajamos a un proveedor y decidimos cambiarnos más tarde, ¿hay algo que perderíamos?

Estoy interesado en la respuesta general sobre esto para Git, pero también hay posibles problemas con los datos (no necesariamente solo el historial de versiones de origen) almacenados como parte de los que se perderían tratando de migrar específicamente entre GitHub y Pilas de Atlassian?

Gracias,

actualización == (v2) ==

Sólo para el seguimiento, lo hice con éxito hacer esto a partir del clon que tenía de Stash y empujar a Github mediante el uso de:

git clone --mirror ssh://[email protected]:8080/Stash/Project.git MyGithubProject 
cd MyGithubProject 
git remote set-url origin [email protected]:MyGithubOrg/MyGithubProject.git 
git push --mirror origin 

Y conservó todo el historial esperado, incluidas las sucursales.

+1

Al clonar un repositorio Git se obtiene todo - que es el punto de git - usted debe ser capaz de mover tantas veces como desee –

+0

Pero puede que clonar a un nuevo repositorio? Mirando a través de GitHub, por ejemplo, no veo cómo crear un nuevo repositorio basado en uno que inicié desde mi máquina local. Entiendo que si tuviera acceso SSH a los servidores que puedo mover, me preocupan las limitaciones cuando uso un servicio de host como Stash o GitHub. Es posible que esté malinterpretando algo básico. Por favor corrígeme si la preocupación es tonta o la pregunta simplemente no tiene sentido. –

+1

Todos los repositorios de git se crean iguales (más o menos). El que está en tu caja es tanto un repositorio como el de github. Por lo tanto, si configura el nuevo como un nuevo control remoto y empuja sus ramas hacia él, se convierte en el mismo que los otros dos. – Dan

Respuesta

3

Joe, según su comentario, la pregunta no tiene mucho sentido en el contexto de git. Cualquier clon de su repositorio contiene el historial completo del repositorio. Ese escrito, hay tres cosas que había necesidad de volver a crear si ha cambiado servicios:

  1. Cualquier git hooks configuración en github. Estos no se almacenan con el repositorio (para cualquier repositorio clonado). Sin embargo, no hay ninguna razón por la que no puedas controlar las versiones también, por lo que sería fácil recrearlas en cualquier servicio. Esta es también una buena práctica. La versión controla todo lo que te importa.

  2. Usuarios autorizados a acceder al repositorio. Obviamente, cualquier cambio de servicio significa que sus desarrolladores tendrían que obtener cuentas en ese servicio, obtener permiso para ver el repositorio de la compañía, etc.

  3. Depósitos personales de desarrolladores. Las bifurcaciones del informe de su empresa obviamente tendrán que recrearse en el nuevo servicio, pero esta es una operación trivial una vez que haya hecho -2- y haya guardado -1-en mente. Podrías hacerlo tan fácilmente como David describe en su respuesta.

2

Acabo de probar esto con dos controles remotos diferentes y agregando el nuevo, eliminando el anterior y presionando, el historial de confirmación no se perdió.

+0

¿Cómo agregaste el "nuevo" aquí?Creo que si esto es algo en lo que tengo el servidor al que estoy migrando, todo esto funciona de manera directa, pero no estoy seguro de cómo crear un nuevo proyecto utilizando un proyecto preexistente con cualquiera de esos servicios de alojamiento. Gracias, –

+1

Cree el repositorio en el nuevo servicio, luego agregue la url Git del repositorio como control remoto en su repositorio de trabajo donde actualmente tiene el control remoto del otro servicio. "git add github url.git" - donde url.git es la URL del nuevo repositorio y github es lo que está nombrando el control remoto. A continuación, puede eliminar el control remoto anterior con "git remove origin" e insertar todas sus ramas. –