2009-11-07 27 views
15

¿Cuál sería la mejor manera de configurar un espejo git de solo lectura de un repositorio svn existente, y configurar ganchos post-commit de modo que cada vez que alguien se comprometa a svn, el git espejo se actualiza automáticamente? Principalmente, me gustaría ejecutar git-svn clone solo una vez, en el servidor, y luego dejar que la gente simplemente revise desde git sin tener que git-svn clonar todo el repositorio de svn.espejo git de solo lectura de un repositorio svn

Respuesta

4

Lo hago en un proyecto que usa SVN (empujando a un repositorio público en github). No tengo un SVN gancho, pero esto en una tarea programada:

#!/bin/bash 

repo=/path/to/my-mirror.git 
lockfile="$repo/cron-lock" 

if ! lockfile -r1 "$lockfile";then 
     exit 1 
fi 

export GIT_DIR=$repo 
# update refs/remotes/git-svn: 
git svn fetch -q 
# make 'master' match the git-svn branch: 
git fetch "$repo" refs/remotes/git-svn:refs/heads/master 
# publish to github 
git push github master 

rm -f "$lockfile" 

Si lanza esto de un SVN gancho en lugar de una tarea programada, que debería funcionar.

Por supuesto, es necesario establecer una llamada remota utilizando githubgit remote add github [...]. El repositorio de git que estoy usando es un repositorio "simple" (ver git init --bare).

+0

gracias, utilizar github parece ser el camino a seguir –

2

La mejor manera de configurar un espejo Svn/Git (de escritura) sería usar SubGit - esta es una herramienta específicamente desarrollada para esta tarea. Descargo de responsabilidad: soy el desarrollador de esta herramienta.

+0

hermoso, gracias –

+1

Además, SubGit 2.0 ya no necesita acceso local al repositorio de Subversion y podría construir un espejo Git escribible de un repositorio de Subversion remoto también (ver http: // subgit.com/eap). –

+2

@AlexanderKitaev Tenga en cuenta que debe divulgar su afiliación cuando se vincula a un producto u otro sitio web. Veo en [esta publicación] (http://stackoverflow.com/a/13288270/2057919) que ha desarrollado SubGit. He editado esta respuesta para reflejar eso. En el futuro, asegúrese de mencionar su conexión si realiza un enlace a SubGit. –

Cuestiones relacionadas