308 votos

Empujando existente en un repositorio git SVN

He estado haciendo toda mi obra en Git y empujando a GitHub. He sido muy feliz con el software y el sitio y no tengo ningún deseo de cambiar mis prácticas de trabajo en este punto.

Mi PhD asesor está pidiendo a todos los estudiantes a continuar con su trabajo en un repositorio SVN hospedado en la universidad. He encontrado toneladas de documentación y tutoriales sobre tire hacia abajo de la existente SVN repo en git, pero nada de empujar a un repositorio git para un nuevo SVN repo. Espero que debe haber alguna forma de hacerlo con una combinación de git-svn y una nueva rama y de reajuste y todas esas maravillosas palabras, pero soy un git novato y no se sienten seguros con cualquiera de ellos.

Luego quiero sólo tiene que ejecutar un par de comandos para empujar compromete a que SVN repo cuando puedo elegir, quiero seguir usando Git y sólo tiene el SVN repo espejo de lo que está en Git.

Voy a ser la única persona que alguna vez cometer SVN, si esto hace la diferencia.

Las instrucciones sobre cómo hacer esto sería muy apreciada!

341voto

troelskn Puntos 51966

Necesitaba esto, y con la ayuda de Bombe la respuesta de + algunos trasteo, yo tengo trabajo. Aquí está la receta:

Importación de git -> svn

1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase trunk
5.1.  git status
5.2.  git add (conflicted-files)
5.3.  git rebase --continue
5.4.  (repeat 5.1.)
6. git svn dcommit

Después de #3, usted obtendrá un críptico mensaje como este:

Uso de un mayor nivel de URL: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo

Simplemente lo ignoran.

Cuando se ejecuta #5, usted puede obtener los conflictos. Resolver estos mediante la adición de archivos con el estado "fusionadas" y la reanudación de reajuste. Eventualmente, usted será hecho; a Continuación, sincronizar de nuevo a la svn-repo, utilizando dcommit. Eso es todo.

Mantener los repos de sincronización

Ahora puede sincronizar desde svn -> git, usando los siguientes comandos:

git svn fetch
git rebase trunk

Y a la sincronización de git -> svn, utilice:

git svn dcommit

Nota Final

Es posible que desee probar esto en una copia local, antes de aplicar a un repo. Usted puede hacer una copia de su git-repo a un lugar temporal, simplemente usando cp -r, así como toda la información está en la repo de sí mismo. A continuación, puede configurar un archivo de prueba a base de repo, mediante:

svnadmin create /home/name/tmp/test-repo

Y verificación de una copia de trabajo, mediante:

svn co file:///home/name/tmp/test-repo svn-working-copy

Que te permitirá jugar con las cosas antes de hacer cambios duraderos.

Addendum: Si te equivocas git svn init

Si accidentalmente ejecutar git svn init con la dirección url incorrecta, y que no eran lo suficientemente inteligente como para tener una copia de seguridad de tu trabajo (no pregunten ...), usted no sólo puede ejecutar de nuevo el mismo comando. Sin embargo, puede deshacer los cambios con el comando:

rm -rf .git/svn
edit .git/config

Y eliminar la sección [svn-remote "svn"] sección.

A continuación, puede ejecutar git svn init de nuevo.

25voto

Alex Rouillard Puntos 515

A continuación mostramos cómo se hizo el trabajo :

Clonar el repositorio git somwhere en su máquina. Abierto .git/config y añadir la siguiente(de http://www.kerrybuckley.org/2009/10/06/maintaining-a-read-only-svn-mirror-of-a-git-repository/):

[svn-remote "svn"]
    url = https://your.svn.repo
    fetch = :refs/remotes/git-svn

ahora, desde una ventana de consola, tipo estos :

git svn fetch svn
git checkout -b svn git-svn
git merge master

Ahora, si se rompe aquí por la razón que sea, el tipo de estas 3 líneas :

git checkout --theirs .
git add .
git commit -m "some message"

y por último, usted puede comprometerse a svn

git svn dcommit

nota: yo siempre rechazo que carpeta después.

saludos !

8voto

Bombe Puntos 34185

Crear un nuevo directorio en el repositorio de subversion para su proyecto.

# svn mkdir --parents svn://ip/path/project/trunk

Cambio de Git-proyecto administrado e inicializar git-svn.

# git svn init svn://ip/path/project -s
# git svn fetch

Esto va a crear un único cometer, porque su proyecto svn directorio está vacío. Ahora reajuste de todo en la que se comprometen, git svn dcommit y que se debe hacer. Va en serio lío hasta su confirmación de fechas, sin embargo.

4voto

Casey Puntos 19286

http://code.google.com/p/support/wiki/ImportingFromGit

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