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:
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 cadagit 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.
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.