2009-09-08 18 views
7

El problema es simple. He usado git cvsimport para importar un repositorio cvs en una sucursal remota en un repositorio git local. Luego deseo sincronizar este repositorio: ramas, etiquetas y todo, a un repositorio git en la nube (github/gitorious). Para hacer esto, no tengo acceso a rsync o copio el repositorio directamente, tengo que usar git push.Cómo duplicar un control remoto de un git a otro con push

¿Cómo hago para reflejar mi repositorio local para que otros tengan acceso al historial completo de _cvsimport_d?

Concretamente:
I importación y el seguimiento de un repositorio usando cvsimport:

git cvsimport -i -v -C cdt-make-core -d :pserver:[email protected]:/cvsroot/tools -r cvs org.eclipse.cdt/all/org.eclipse.cdt.make.core

Las importaciones por encima org.eclipse.cdt.make.core en el control remoto cvs en la cdt- git repo make-core.

entonces puedo empuje la cabeza de la rama principal de CVS a github:

git push github cvs/master:refs/heads/cvs/HEAD

(que especifique la ruta del mando a distancia de forma explícita por lo que si no existe se crea.)

Es hay alguna manera de sincronizar todas las ramas: cvs/* => cvs/* en el control remoto?
¿Hay alguna forma de sincronizar todas las etiquetas?

Respuesta

3

Mis resultados son que si utiliza la segunda solución razonable a continuación, primero debe hacer el --mirror, ya que borra esos cvs/branches que está intentando impulsar. Así que la fórmula completa es:

git push --mirror -v github 
git push --force github cvs/master:refs/heads/cvs/HEAD 
for x in `git branch -r | grep '^..cvs/[a-zA-Z0-9_-]*$' | sed -e 's/^..//'` ; do 
    git push -v github $x:refs/heads/$x 
    git config branch.$x.remote github 
    git config branch.$x.merge refs/heads/$x 
done 
5

pienso que usted está buscando la opción --mirror para empujar:

git push --mirror github 

Esto hará que todos los árbitros (ramas y etiquetas), incluyendo las actualizaciones no avance rápido. Lo uso para crear copias de seguridad de mi repositorio local.

El man page describe así:

lugar de nombrar cada ref para empujar, especifica que todas las refs bajo $GIT_DIR/refs/ (que incluye pero no se limita a refs/heads/, refs/remotes/, y refs/tags/) pueden reflejar a la repositorio remoto Los refs locales recién creados se enviarán al extremo remoto, los refs localmente actualizados se actualizarán por la fuerza en el extremo remoto, y los refs eliminados se eliminarán del extremo remoto. Este es el valor predeterminado si se configura la opción de configuración remote.<remote>.mirror.

[OT: Yo uso CDT en mi trabajo diario y lo amo]

+0

Gracias. Lamentablemente, esto no parece hacer lo que quiero. Parece que esto hace que el repositorio en la nube se vea como el mío, lo que significa que el repositorio github tiene un control remoto 'cvs', pero no hay ramas cvs visibles. Lo que quería es copiar el contenido completo de los controles remotos/cvs/* a cvs/* en github. –

+0

Ahh, ya veo. Perdón por el callejón sin salida. –

1

de haber experimentado, no creo que haya ninguna compatibilidad integrada para lo que yo quiero hacer.

Sin embargo parece que hay dos soluciones razonables:

  • No especifique -r a cvsimport.
    Las ramas importadas existirán directamente en el repositorio y se puede usar --mirror como Pat sugerido.
  • Escriba un script de shell para presionar los controles remotos * cvs/** de a uno por vez (lo cual es sencillo).
    Uso --mirror de manera que las etiquetas se sincronizan correctamente

que originalmente quería mantener las cvsimport d ramas separadas de los espacios de nombre. Sin embargo, con la primera opción, tiene sentido mantener el repositorio cvsimport completamente separado (y solo clonarlo). Luego puedo seguir rastreando CVS sin riesgo de ensuciar el repositorio de rastreo git.

Cuestiones relacionadas