151 votos

¿Es posible tener un repositorio de subversión como un submódulo git?

¿Hay una manera de añadir un repositorio de subversión como un submódulo git en mi repositorio git?

Algo así como: submódulo git-svn add https://svn.foo.com/svn/proj --stdlayout svn-proyecto

Dónde https://svn.foo.com/svn/proj apunta a un repositorio de Subversion.

Sé que hay git-svn lo que permite interactuar con un repositorio Subversion. Así que estoy pensando, tal vez hay una manera de hacer checkout de un repositorio Subversion con git-svn y luego usarlo como un submódulo.

126voto

richq Puntos 29694

No. Su mejor apuesta sería la creación de un espejo del repositorio svn en un repositorio git.

git svn clone -s http://subversion.example.com/ myclone
cd myclone
git remote add origin git@example.com:project.git
git push origin master

A continuación, puede agregar el repositorio git como un submódulo del proyecto original

cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m"Add submodule"

Hay una diferencia conceptual entre svn:externals y git submódulo que pueden viaje hasta si te acercas a este de una subversión punto de vista. El git submódulo está vinculada a la revisión que usted le da. Si "aguas arriba" de los cambios, entonces usted tiene que actualizar su submódulo de referencia.

Así que cuando se sincronizó con la parte de arriba de subversion:

cd /path/to/myclone
git svn rebase
git push

... el proyecto git todavía el uso de la revisión original que hemos cometido anteriormente. Para actualizar a la versión svn de HEAD, usted tendría que usar

cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"

8voto

sherbang Puntos 2675

Yo sólo fui a través de este. Yo estoy haciendo algo similar a rq, pero ligeramente diferentes. Yo instalación de uno de mis servidores para alojar estos git clones de la svn repos necesito. En mi caso yo sólo quiero sólo lectura versiones, y la necesidad de un desnudo de repo en el servidor.

En el servidor que ejecuta:

GIT_DIR=<projectname>.git git init
cd <projectname>.git/
GIT_DIR=. git svn init svn://example.com/trunk
GIT_DIR=. git svn fetch
git gc

Esto configura mi desnudo repo, entonces tengo un script cron para actualizarlo:

#!/usr/bin/python

import os, glob

GIT_HOME='/var/www/git'

os.chdir(GIT_HOME)
os.environ['GIT_DIR']='.'
gits = glob.glob('*.git')
for git in gits:
  if not os.path.isdir(git):
    continue
  os.chdir(os.path.join(GIT_HOME, git))
  if not os.path.isdir('svn/git-svn'):
    #Not a git-svn repo
    continue

  #Pull in svn updates
  os.system('git svn fetch && git gc --quiet')
  #fix-svn-refs.sh makes all the svn branches/tags pullable
  os.system('fix-svn-refs.sh')
  #Update the master branch
  os.system('git fetch . +svn/git-svn:master && git gc --quiet')`

Esto también requiere fix-svn-refs.sh de http://www.shatow.net/fix-svn-refs.sh Esto fue principalmente inspirado por: http://gsocblog.jsharpe.net/archives/12

No estoy seguro de por qué la git gc que se necesita aquí, pero yo no era capaz de hacer una git pull sin ella.

Así que después de todo esto, usted puede entonces utilizar git submódulo siguientes rq las instrucciones.

5voto

vadishev Puntos 1840

Actualmente git-svn no soporte svn:externals. Pero hay otras dos herramientas que pueden ayudarle a:

  1. SubGit

    SubGit está del lado del servidor, la solución Git permite el acceso al repositorio de Subversion, y viceversa. Por lo tanto, si usted tiene acceso local al repositorio de Subversion disponible por https://svn.foo.com/svn/proj, se puede instalar SubGit en ella. Usted puede referirse a documenation para obtener más detalles, pero en general es bastante fácil de usar SubGit:

    $ subgit configure $SVN_REPOS
    

    Por defecto configurar los conjuntos de comandos de Git repository ruta de acceso $SVN_REPOS/.git, pero se puede ajustar $SVN_REPOS/conf/subgit.conf archivo con el fin de cambiar esta ruta, añadir más repositorios Git para cada proyecto en el repositorio de Subversion, filtro de ramas, etiquetas, etc. También puede ajustar $SVN_REPOS/conf/authors.txt a mapa de svn, los nombres de los autores a git identidades.

    $ subgit install $SVN_REPOS
    $ ... let initial translation complete ... 
    $ TRANSLATION SUCCESSFUL
    

    En este momento usted tiene el repositorio de Subversion y sus Git contraparte, que son continuamente sincronizados, es decir. SubGit inmediatamente se traduce svn revisión en git commit en cada svn commit y git commit en svn revisión en cada git push.

    Todo lo que necesitas es hacer repositorio Git disponible para committers. Echa un vistazo a git-http-backend para que. A continuación, puede añadir creado repositorio Git como de costumbre submódulo. Así que no hay ninguna necesidad de hacer uso de herramientas externas como git-svn o cualquier otro.

    SubGit se cierra el software de código, pero es gratuito para los proyectos open-source.

  2. SmartGit

    SmartGit reemplaza git-svn en el lado del cliente. Más información sobre sus características que usted puede encontrar aquí.

    En particular SmartGit admite tanto submódulos de git y svn:externals, puedes mezclarlas en su repositorio.

    SmartGit es el software privativo, pero es que es gratis para uso no comercial.

4voto

pcuenca Puntos 41

En adición a lo rq dijo, otro método sería el uso de la tercera parte de "factores externos" (proyecto http://nopugs.com/ext-tutorial), el que mejor imita cómo svn referencias externas trabajo. Con los elementos externos puede seguir ya sea git o svn repositories, y parece más fácil de pushear los cambios de subida a los repos. Sin embargo, se requiere de los miembros del proyecto para descargar e instalar el paquete separado.

No he utilizado submódulos o externos, sin embargo, me he pasado un par de horas leyendo acerca de todas las alternativas y parece que los externos se adapta mejor a mis necesidades. Hay una excelente discusión acerca de estos y otros métodos personalizados en el Capítulo 15 de "Control de versiones con Git", por Jon Loeliger (http://oreilly.com/catalog/9780596520120), que recomiendo encarecidamente.

0voto

Otto Puntos 5166

Pistón está siendo reescrito para apoyar esto, ya la inversa, más el URL Subversion existente en un repoistory Subvresion y git git .

Echa un vistazo a el pistón repositorio Github .

Por desgracia, no parece haber sido puesto en libertad.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X