tortoise repositorio migrar crear svn git git-svn

repositorio - git-svn download



¿Es posible tener un repositorio de Subversion como submódulo de Git? (6)

Acabo de pasar por eso. Estoy haciendo algo similar a rq, pero ligeramente diferente. Configuré uno de mis servidores para alojar estos clones de git de los repos svn que necesito. En mi caso, solo quiero versiones de solo lectura y necesito un repositorio simple en el servidor.

En el servidor que ejecuto:

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 repositorio desnudo, luego 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 desde http://www.shatow.net/fix-svn-refs.sh Esto se inspiró principalmente en: http://gsocblog.jsharpe.net/archives/12

No estoy seguro de por qué el git gc es necesario aquí, pero no pude hacer un git pull sin eso.

Entonces, después de todo esto, puedes usar el submódulo git siguiendo las instrucciones de rq.

¿Hay alguna manera de agregar un repositorio de Subversion como un submódulo de Git en mi repositorio de Git?

Algo como:

git-svn submodule add https://svn.foo.com/svn/proj --stdlayout svn-project

Donde https://svn.foo.com/svn/proj apunta a un repositorio de Subversion.

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


Actualmente git-svn no es compatible con svn: externals . Pero hay otras dos herramientas que pueden ayudarte:

  1. SubGit

    SubGit es una solución del lado del servidor, que permite a Git acceder al repositorio de Subversion y viceversa. Puede consultar documenation para más detalles, pero en general es bastante fácil de usar SubGit:

    $ subgit configure --layout auto $SVN_URL $GIT_REPO

    El comando anterior detectará el diseño de las ramas en el proyecto SVN y luego creará un repositorio vacío vacío de Git listo para duplicar el proyecto SVN. Es posible que se le pidan credenciales, a menos que ya estén almacenadas en el caché de credenciales SVN en el directorio ~ / .subversion. También puede ajustar $GIT_REPO/subgit/authors.txt para asignar nombres de autor SVN a las identidades de Git.

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

    En este momento, tiene el repositorio de Subversion conectado al repositorio de Git recién creado. SubGit traduce la revisión de SVN en la confirmación de Git en cada svn commit y la confirmación de Git en la revisión de SVN en cada git push .

Todo lo que necesita más es hacer que el repositorio de Git esté disponible para los committers. Echa un vistazo a git-http-backend para eso. Luego puede agregar el repositorio de Git creado como un submódulo habitual. SubGit también está disponible como un complemento para el servidor Bitbucket, para obtener más información here . Por lo tanto, no es necesario utilizar ninguna herramienta externa como git-svn o cualquier otra.

SubGit es un software propietario, pero es gratuito para pequeñas empresas (hasta 10 committers), proyectos académicos y de código abierto.

  1. SmartGit

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

    En particular, SmartGit admite tanto los submódulos de git como svn: externals , puede mezclarlos en su repositorio.

    SmartGit es un software propietario, pero es gratuito para uso no comercial.


Además de lo que dijo rq, otro método sería usar el proyecto externo "externalidades" ( http://nopugs.com/ext-tutorial ), que imita mejor cómo funcionan las referencias externas svn. Con externalidades puede rastrear los repositorios de git o svn, y parece más fácil enviar sus cambios en sentido ascendente a esos repositorios. Sin embargo, requiere que los miembros del proyecto descarguen e instalen el paquete por separado.

No he usado submódulos o externos todavía; sin embargo, he dedicado algunas horas a leer sobre todas las alternativas y parece que las externas se adaptarán mejor a mis necesidades. Existe una excelente discusión sobre estos y otros métodos personalizados en el Capítulo 15 de "Version Control with Git", de Jon Loeliger ( http://oreilly.com/catalog/9780596520120 ), que recomiendo encarecidamente.


Bueno, está git-remote-testsvn , así que supongo que algo así como

git submodule add testsvn::http://www.telegraphics.com.au/svn/bzquips/trunk/ / module/bzquips

Deberia trabajar. ¿Lo hace?


No. Tu mejor opción sería configurar un espejo del repositorio svn en un repositorio dedicado de git.

git svn clone -s http://subversion.example.com/ mysvnclone cd mysvnclone git remote add origin [email protected]:project.git git push origin master

Luego puede agregar el repositorio git como un submódulo al 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"

Existe una diferencia conceptual entre svn: externals y el submódulo de git que puede hacerte tropezar si te acercas a esto desde un punto de vista de subversión. El submódulo git está vinculado a la revisión que le das. Si "corriente arriba" cambia, entonces debe actualizar la referencia de su submódulo.

Entonces, cuando resincronizamos con la subversión ascendente:

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

... el proyecto git todavía usará la revisión original que cometimos antes. Para actualizar a svn HEAD, deberías usar

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


Piston se está reescribiendo para admitir esto, y lo contrario, más la URL de Subversión existente en un repositorio de subcresiones y git + git.

Mira el depósito de pistón de Github .

Desafortunadamente, no parece haber sido lanzado.