2010-06-23 11 views
12

Estoy empezando con Mercurial, y he leído Joel Spolsky's Hg Init tutorial, que me gustó.¿Cómo muevo un repositorio Mercurial privado a un servidor central?

Me pregunto: digamos que tengo un repositorio privado y lo trabajo durante aproximadamente un mes. Luego decido que quiero centralizarlo o hacerlo público, como en el bitbucket.org. Quiero conservar toda la historia.

Lo intuitiva sería utilizar hg clone, pero de acuerdo con los documentos:

Se añade la ubicación de la fuente de archivo .hg/hgrc del nuevo repositorio, como el valor por defecto que se utilizará para el futuro tira.

No creo que esto sea lo que yo quisiera, ya que la fuente es mi repositorio local, privado, y el destino es el servidor público. No quiero que el servidor público intente sacar de mi repositorio privado en el futuro pensando es el servidor central. Espero que esto tenga sentido.

¿Debo modificar manualmente el archivo .hg/hgrc en el servidor? ¿Me estoy acercando a esto correctamente?

+2

Ned tenía su respuesta, pero FWIW puede usar clonar para crear un nuevo repositorio en otro lugar si su destino es una URL ssh: //. Si está hablando con el servidor a través de http: //, entonces necesita 'hg init' en el servidor y luego 'hg push' desde local. La configuración de la fuente como el valor predeterminado para pulls es en su mayoría irrelevante en un push-clone ya que probablemente nunca "tire" de ese repositorio remoto, solo presione hacia él. Si te encuentras tirando del repositorio remoto man 'puedes cambiar los valores predeterminados en la sección [paths] de .hgrc. –

+0

Excelentes puntos, gracias, Ry4an. Veo lo que quiere decir acerca de la irrelevancia de la ubicación de extracción predeterminada en el servidor. –

Respuesta

18

BitBucket's help dice que es tan fácil como hacer una cesión temporal vacío en BitBucket, a continuación, empujando a la misma:

... crear un nuevo repositorio vacío a través de la página "Crear repositorio". Asumiremos que este repositorio se llama blonk y se encuentra en http://bitbucket.org/jespern/blonk.

Ahora, basta con empujar a la misma:

$ cd ~/Work/blonk # our existing hg repository 
    $ hg push http://bitbucket.org/jespern/blonk 
    ... 

hecho!

Puede editar .hg/hgrc en su repositorio para incluir la ruta predeterminada a Bitbucket:

$ cat .hg/hgrc 
    [paths] 
    default = http://bitbucket.org/jespern/blonk 

Ahora sólo tiene que introducir empuje hg hg pull y sin tener que especificar la URL completa.

4

Hacer esta operación usando 'hg push', como se describe, es probablemente la mejor manera de hacerlo, en general.

Sin embargo, en otras circunstancias, podría ser conveniente, o tranquilizador, tener en cuenta que todos los del estado de Hg está contenido dentro del directorio .hg, y así simplemente moviendo este directorio es suficiente para mover el repositorio.

Por ejemplo, si tiene acceso ssh a una máquina en example.com, puede atacar (o comprimir) su directorio .hg en el repositorio "privado", descomprimirlo en, por ejemplo, ~/repo/foo en la máquina remota (creando así un directorio ~/repo/foo/.hg allí), y luego simplemente clonar este:

$ hg clone ssh://example.com/repo/foo 

esto tiene un ligero puerta trasera sienten a la misma, de acuerdo. Sin embargo, aquí no hay nada bajo control, y no es necesario editar los archivos de configuración. Cuando hago esto, me resulta menos confuso que el camino "correcto".

+0

Gracias, Norman. Interesante alternativa –

Cuestiones relacionadas