¿Es posible tener un repositorio de Subversion como un submódulo de Git?
¿Hay alguna manera de agregar un repositorio Subversion como un submódulo Git en mi repositorio 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 hay una manera de checkout un repositorio de Subversion con git-svn
y luego usarlo como un submódulo.
6 answers
No. Tu mejor opción sería configurar una réplica del repositorio svn en un repositorio git dedicado.
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"
Hay una diferencia conceptual entre svn:externals y git submodule que puede hacer tropezar si se aborda esto desde el punto de vista de subversion. El submódulo git está vinculado a la revisión que le das. Si" upstream " cambia, entonces tienes que actualizar los submódulos referencia.
Así que cuando resincronizamos con la subversión original:
cd /path/to/mysvnclone
git svn rebase
git push
... el proyecto git seguirá utilizando la revisión original que confirmamos anteriormente. Para actualizar a la CABEZA svn, 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"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-08 09:37:40
Acabo de pasar por esto. Estoy haciendo algo similar a rq, pero ligeramente diferente. Configuré uno de mis servidores para alojar estos clones git de los repositorios svn que necesito. En mi caso, solo quiero versiones de solo lectura, y necesito un repositorio desnudo en el servidor.
En el servidor corro:
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 de http://www.shatow.net/fix-svn-refs.sh Esto fue principalmente inspirado by: http://gsocblog.jsharpe.net/archives/12
No estoy seguro de por qué se necesita el git gc
aquí, pero no pude hacer un git pull
sin él.
Así que después de todo esto puedes usar el submódulo git siguiendo las instrucciones de rq.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-07 11:32:01
Actualmente git-svn no admite svn:externals. Pero hay otras dos herramientas que pueden ayudarte:
-
SubGit es una solución del lado del servidor, habilita el acceso de Git al repositorio 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 ramas en el proyecto SVN y luego creará repositorio Git vacío listo para reflejar el proyecto SVN. Se le pueden pedir credenciales a menos que estas ya estén almacenadas en la caché de credenciales SVN en~/.directorio de subversion. También puede ajustar
$GIT_REPO/subgit/authors.txt
para asignar nombres de autor SVN a identidades Git.$ subgit install $GIT_REPO $ ... let initial translation complete ... $ TRANSLATION SUCCESSFUL
En este momento tiene el repositorio Subversion conectado al repositorio Git recién creado. SubGit traduce la revisión SVN en Git commit en cada
svn commit
y Git commit en la revisión SVN en cadagit push
.
Todo lo que necesitas es hacer que el repositorio Git esté disponible para los committers. Echa un vistazo a git-http-backend para eso. Luego puede agregar el repositorio 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, consulte aquí. Por lo tanto, no hay necesidad de utilizar ninguna herramienta externa como git-svn o cualquier otra.
SubGit es software privativo, pero es gratuito para pequeñas empresas (hasta 10 committers), proyectos académicos y de código abierto.
-
SmartGit reemplaza a git-svn en el lado del cliente. Más información sobre sus características puede encontrar aquí.
En particular, SmartGit soporta ambos submódulos git y svn:externals , puedes mezclarlos en tu repositorio.
SmartGit es software privativo, pero es gratuito para uso no comercial.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-29 20:15:52
Además de lo que rq dijo, otro método sería utilizar el proyecto de terceros "externos" ( http://nopugs.com/ext-tutorial ), que imita mejor cómo funcionan las referencias externas de svn. Con los externos puedes rastrear repositorios git o svn,y parece más fácil enviar tus cambios a esos repositorios. Sin embargo, requiere que los miembros del proyecto descarguen e instalen el paquete separado.
Todavía no he usado submódulos o externos; sin embargo, he pasado algunas horas leer sobre todas las alternativas y parece que los externos serán una mejor opción para mis necesidades. Hay una excelente discusión sobre 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-18 17:58:11
Se está reescribiendo Piston para soportar esto, y lo contrario, más la URL de Subversion existente en un repositorio de Subvresion y git+git.
Echa un vistazo a el repositorio piston Github.
Desafortunadamente no parece haber sido lanzado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-21 18:45:39
Bueno, hay git-remote-testsvn
, así que supongo que algo como
git submodule add testsvn::http://www.telegraphics.com.au/svn/bzquips/trunk/ \
module/bzquips
Debería funcionar. ¿Lo hace?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-22 21:22:56